From 5594e9af8c81f648bce38e4ac3abdff6147eb349 Mon Sep 17 00:00:00 2001 From: Dario Manesku Date: Wed, 11 Dec 2013 04:37:51 +0100 Subject: [PATCH] Added 15-shadowmaps-simple and 16-shadowmaps. --- .../15-shadowmaps-simple/fs_smsimple_draw.sc | 96 + .../fs_smsimple_packdepth.sc | 15 + examples/15-shadowmaps-simple/hollowcube.obj | 934 + examples/15-shadowmaps-simple/makefile | 22 + .../shadowmaps_simple.cpp | 670 + examples/15-shadowmaps-simple/varying.def.sc | 7 + .../15-shadowmaps-simple/vs_smsimple_draw.sc | 24 + .../vs_smsimple_packdepth.sc | 15 + examples/16-shadowmaps/common.sh | 235 + .../fs_shadowmaps_color_black.sc | 11 + .../fs_shadowmaps_color_lightning.sh | 84 + .../fs_shadowmaps_color_lightning_esm.sc | 15 + .../fs_shadowmaps_color_lightning_esm_csm.sc | 17 + ...s_shadowmaps_color_lightning_esm_linear.sc | 16 + ...adowmaps_color_lightning_esm_linear_csm.sc | 18 + ...dowmaps_color_lightning_esm_linear_omni.sc | 17 + .../fs_shadowmaps_color_lightning_esm_omni.sc | 16 + .../fs_shadowmaps_color_lightning_hard.sc | 15 + .../fs_shadowmaps_color_lightning_hard_csm.sc | 16 + ..._shadowmaps_color_lightning_hard_linear.sc | 15 + ...dowmaps_color_lightning_hard_linear_csm.sc | 17 + ...owmaps_color_lightning_hard_linear_omni.sc | 16 + ...fs_shadowmaps_color_lightning_hard_omni.sc | 16 + .../fs_shadowmaps_color_lightning_main.sh | 151 + .../fs_shadowmaps_color_lightning_pcf.sc | 15 + .../fs_shadowmaps_color_lightning_pcf_csm.sc | 17 + ...s_shadowmaps_color_lightning_pcf_linear.sc | 16 + ...adowmaps_color_lightning_pcf_linear_csm.sc | 17 + ...dowmaps_color_lightning_pcf_linear_omni.sc | 17 + .../fs_shadowmaps_color_lightning_pcf_omni.sc | 16 + .../fs_shadowmaps_color_lightning_vsm.sc | 15 + .../fs_shadowmaps_color_lightning_vsm_csm.sc | 16 + ...s_shadowmaps_color_lightning_vsm_linear.sc | 16 + ...adowmaps_color_lightning_vsm_linear_csm.sc | 17 + ...dowmaps_color_lightning_vsm_linear_omni.sc | 17 + .../fs_shadowmaps_color_lightning_vsm_omni.sc | 16 + .../fs_shadowmaps_color_texture.sc | 22 + examples/16-shadowmaps/fs_shadowmaps_hblur.sc | 14 + .../16-shadowmaps/fs_shadowmaps_hblur_vsm.sc | 15 + .../16-shadowmaps/fs_shadowmaps_packdepth.sc | 14 + .../fs_shadowmaps_packdepth_linear.sc | 13 + .../fs_shadowmaps_packdepth_vsm.sc | 20 + .../fs_shadowmaps_packdepth_vsm_linear.sc | 20 + .../16-shadowmaps/fs_shadowmaps_texture.sc | 14 + .../fs_shadowmaps_unpackdepth.sc | 19 + .../fs_shadowmaps_unpackdepth_vsm.sc | 20 + examples/16-shadowmaps/fs_shadowmaps_vblur.sc | 14 + .../16-shadowmaps/fs_shadowmaps_vblur_vsm.sc | 15 + examples/16-shadowmaps/hollowcube.obj | 934 + examples/16-shadowmaps/makefile | 22 + examples/16-shadowmaps/shadowmaps.cpp | 3296 ++++ examples/16-shadowmaps/tree.obj | 14156 ++++++++++++++++ examples/16-shadowmaps/varying.def.sc | 14 + examples/16-shadowmaps/vs_shadowmaps_color.sc | 13 + .../vs_shadowmaps_color_lightning.sc | 25 + .../vs_shadowmaps_color_lightning_csm.sc | 36 + .../vs_shadowmaps_color_lightning_linear.sc | 26 + ...s_shadowmaps_color_lightning_linear_csm.sc | 41 + ..._shadowmaps_color_lightning_linear_omni.sc | 40 + .../vs_shadowmaps_color_lightning_omni.sc | 35 + .../vs_shadowmaps_color_texture.sc | 16 + examples/16-shadowmaps/vs_shadowmaps_depth.sc | 13 + examples/16-shadowmaps/vs_shadowmaps_hblur.sc | 32 + .../16-shadowmaps/vs_shadowmaps_packdepth.sc | 15 + .../vs_shadowmaps_packdepth_linear.sc | 15 + .../16-shadowmaps/vs_shadowmaps_texture.sc | 16 + .../vs_shadowmaps_texture_lightning.sc | 20 + .../vs_shadowmaps_unpackdepth.sc | 16 + examples/16-shadowmaps/vs_shadowmaps_vblur.sc | 32 + examples/common/entry/entry.cpp | 31 +- examples/common/fpumath.h | 10 + examples/runtime/meshes/hollowcube.bin | Bin 0 -> 24175 bytes examples/runtime/meshes/tree.bin | Bin 0 -> 100745 bytes examples/runtime/meshes/tricube.bin | Bin 0 -> 24175 bytes .../glsl/fs_shadowmaps_color_black.bin | Bin 0 -> 70 bytes .../glsl/fs_shadowmaps_color_lightning.bin | Bin 0 -> 2325 bytes .../fs_shadowmaps_color_lightning_esm.bin | Bin 0 -> 3086 bytes .../fs_shadowmaps_color_lightning_esm_csm.bin | Bin 0 -> 5957 bytes ..._shadowmaps_color_lightning_esm_linear.bin | Bin 0 -> 3057 bytes ...dowmaps_color_lightning_esm_linear_csm.bin | Bin 0 -> 6163 bytes ...owmaps_color_lightning_esm_linear_omni.bin | Bin 0 -> 5988 bytes ...fs_shadowmaps_color_lightning_esm_omni.bin | Bin 0 -> 5945 bytes .../fs_shadowmaps_color_lightning_hard.bin | Bin 0 -> 2930 bytes ...fs_shadowmaps_color_lightning_hard_csm.bin | Bin 0 -> 5297 bytes ...shadowmaps_color_lightning_hard_linear.bin | Bin 0 -> 2942 bytes ...owmaps_color_lightning_hard_linear_csm.bin | Bin 0 -> 5700 bytes ...wmaps_color_lightning_hard_linear_omni.bin | Bin 0 -> 5872 bytes ...s_shadowmaps_color_lightning_hard_omni.bin | Bin 0 -> 5789 bytes .../fs_shadowmaps_color_lightning_omni.bin | Bin 0 -> 3992 bytes .../fs_shadowmaps_color_lightning_pcf.bin | Bin 0 -> 4282 bytes .../fs_shadowmaps_color_lightning_pcf_csm.bin | 293 + ..._shadowmaps_color_lightning_pcf_linear.bin | Bin 0 -> 4443 bytes ...dowmaps_color_lightning_pcf_linear_csm.bin | 321 + ...owmaps_color_lightning_pcf_linear_omni.bin | Bin 0 -> 7385 bytes ...fs_shadowmaps_color_lightning_pcf_omni.bin | Bin 0 -> 7153 bytes .../fs_shadowmaps_color_lightning_pfc.bin | Bin 0 -> 3535 bytes .../fs_shadowmaps_color_lightning_vsm.bin | Bin 0 -> 3718 bytes .../fs_shadowmaps_color_lightning_vsm_csm.bin | 194 + ..._shadowmaps_color_lightning_vsm_linear.bin | Bin 0 -> 3689 bytes ...dowmaps_color_lightning_vsm_linear_csm.bin | 202 + ...owmaps_color_lightning_vsm_linear_omni.bin | Bin 0 -> 6621 bytes ...fs_shadowmaps_color_lightning_vsm_omni.bin | Bin 0 -> 6578 bytes .../glsl/fs_shadowmaps_color_texture.bin | Bin 0 -> 552 bytes .../shaders/glsl/fs_shadowmaps_depth.bin | Bin 0 -> 78 bytes .../shaders/glsl/fs_shadowmaps_hblur.bin | Bin 0 -> 1379 bytes .../shaders/glsl/fs_shadowmaps_hblur_vsm.bin | Bin 0 -> 2650 bytes .../shaders/glsl/fs_shadowmaps_packdepth.bin | Bin 0 -> 274 bytes .../glsl/fs_shadowmaps_packdepth_linear.bin | Bin 0 -> 234 bytes .../glsl/fs_shadowmaps_packdepth_vsm.bin | Bin 0 -> 459 bytes .../fs_shadowmaps_packdepth_vsm_linear.bin | Bin 0 -> 376 bytes .../shaders/glsl/fs_shadowmaps_texture.bin | Bin 0 -> 137 bytes .../glsl/fs_shadowmaps_texture_lightning.bin | Bin 0 -> 2116 bytes .../glsl/fs_shadowmaps_unpackdepth.bin | Bin 0 -> 311 bytes .../glsl/fs_shadowmaps_unpackdepth_vsm.bin | Bin 0 -> 288 bytes .../shaders/glsl/fs_shadowmaps_vblur.bin | Bin 0 -> 1379 bytes .../shaders/glsl/fs_shadowmaps_vblur_vsm.bin | Bin 0 -> 2650 bytes .../shaders/glsl/vs_shadowmaps_color.bin | Bin 0 -> 196 bytes .../glsl/vs_shadowmaps_color_lightning.bin | Bin 0 -> 795 bytes .../vs_shadowmaps_color_lightning_csm.bin | Bin 0 -> 1278 bytes .../vs_shadowmaps_color_lightning_linear.bin | Bin 0 -> 883 bytes ..._shadowmaps_color_lightning_linear_csm.bin | Bin 0 -> 1626 bytes ...shadowmaps_color_lightning_linear_omni.bin | Bin 0 -> 1581 bytes .../vs_shadowmaps_color_lightning_omni.bin | Bin 0 -> 1233 bytes .../glsl/vs_shadowmaps_color_texture.bin | Bin 0 -> 279 bytes .../shaders/glsl/vs_shadowmaps_depth.bin | Bin 0 -> 196 bytes .../shaders/glsl/vs_shadowmaps_hblur.bin | Bin 0 -> 1317 bytes .../shaders/glsl/vs_shadowmaps_packdepth.bin | Bin 0 -> 286 bytes .../glsl/vs_shadowmaps_packdepth_linear.bin | Bin 0 -> 299 bytes .../shaders/glsl/vs_shadowmaps_texture.bin | Bin 0 -> 279 bytes .../glsl/vs_shadowmaps_texture_lightning.bin | Bin 0 -> 608 bytes .../glsl/vs_shadowmaps_unpackdepth.bin | Bin 0 -> 279 bytes .../shaders/glsl/vs_shadowmaps_vblur.bin | Bin 0 -> 1317 bytes premake/premake4.lua | 33 +- 133 files changed, 22734 insertions(+), 16 deletions(-) create mode 100644 examples/15-shadowmaps-simple/fs_smsimple_draw.sc create mode 100644 examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc create mode 100644 examples/15-shadowmaps-simple/hollowcube.obj create mode 100644 examples/15-shadowmaps-simple/makefile create mode 100644 examples/15-shadowmaps-simple/shadowmaps_simple.cpp create mode 100644 examples/15-shadowmaps-simple/varying.def.sc create mode 100644 examples/15-shadowmaps-simple/vs_smsimple_draw.sc create mode 100644 examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc create mode 100644 examples/16-shadowmaps/common.sh create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_black.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_color_texture.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_hblur.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_packdepth.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_texture.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_vblur.sc create mode 100644 examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc create mode 100644 examples/16-shadowmaps/hollowcube.obj create mode 100644 examples/16-shadowmaps/makefile create mode 100644 examples/16-shadowmaps/shadowmaps.cpp create mode 100644 examples/16-shadowmaps/tree.obj create mode 100644 examples/16-shadowmaps/varying.def.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_color_texture.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_depth.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_hblur.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_packdepth.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_texture.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc create mode 100644 examples/16-shadowmaps/vs_shadowmaps_vblur.sc create mode 100644 examples/runtime/meshes/hollowcube.bin create mode 100644 examples/runtime/meshes/tree.bin create mode 100644 examples/runtime/meshes/tricube.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pfc.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_depth.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_hblur.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_hblur_vsm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_packdepth.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm_linear.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_texture_lightning.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_vblur.bin create mode 100644 examples/runtime/shaders/glsl/fs_shadowmaps_vblur_vsm.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_csm.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_csm.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_linear_omni.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin create mode 100644 examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin diff --git a/examples/15-shadowmaps-simple/fs_smsimple_draw.sc b/examples/15-shadowmaps-simple/fs_smsimple_draw.sc new file mode 100644 index 000000000..176030b30 --- /dev/null +++ b/examples/15-shadowmaps-simple/fs_smsimple_draw.sc @@ -0,0 +1,96 @@ +$input v_view, v_normal, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_lightPos; +SAMPLER2D(u_shadowMap, 4); + +vec2 lit(vec3 _ld, vec3 _n, vec3 _vd, float _exp) +{ + //diff + float ndotl = dot(_n, _ld); + + //spec + vec3 r = 2.0*ndotl*_n - _ld; //reflect(_ld, _n); + float rdotv = dot(r, _vd); + float spec = step(0.0, ndotl) * pow(max(0.0, rdotv), _exp) * (2.0 + _exp)/8.0; + + return max(vec2(ndotl, spec), 0.0); +} + +float hardShadow(sampler2D _sampler, vec4 _shadowCoord, float _bias) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = step(receiver, occluder); + return visibility; +} + +float PCF(sampler2D _sampler, vec4 _shadowCoord, float _bias, vec2 _texelSize) +{ + float result = 0.0; + vec2 offset = _texelSize * _shadowCoord.w; + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 1.5) * offset, 0.0, 0.0), _bias); + + return result / 16.0; +} + +void main() +{ + const float shadowMapBias = 0.005; + const vec3 color = vec3_splat(1.0); + + vec3 v = v_view; + vec3 vd = -normalize(v); + vec3 n = v_normal; + vec3 l = u_lightPos.xyz; + vec3 ld = -normalize(l); + + vec2 lc = lit(ld, n, vd, 1.0); + + vec2 texelSize = vec2_splat(1.0/512.0); + float visibility = PCF(u_shadowMap, v_shadowcoord, shadowMapBias, texelSize); + + vec3 ambient = 0.1 * color; + vec3 brdf = (lc.x + lc.y) * color * visibility; + + vec3 final = toGamma(abs(ambient + brdf) ); + gl_FragColor.xyz = final; + gl_FragColor.w = 1.0; +} diff --git a/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc b/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc new file mode 100644 index 000000000..b77d2972e --- /dev/null +++ b/examples/15-shadowmaps-simple/fs_smsimple_packdepth.sc @@ -0,0 +1,15 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + gl_FragColor = packFloatToRgba(depth); +} + diff --git a/examples/15-shadowmaps-simple/hollowcube.obj b/examples/15-shadowmaps-simple/hollowcube.obj new file mode 100644 index 000000000..2980086ba --- /dev/null +++ b/examples/15-shadowmaps-simple/hollowcube.obj @@ -0,0 +1,934 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g holeycube +v 1.500000 1.211657 0.000000 +v 1.500000 1.211656 1.209338 +v 1.236416 1.211656 1.209338 +v 1.236416 1.211657 0.000000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v 1.500000 -0.000000 1.209337 +v 1.500000 -1.211657 1.209337 +v 1.236416 -1.211657 1.209337 +v 1.236416 -0.000000 1.209337 +v 1.236416 -0.000000 1.500000 +v 1.236416 -1.211657 1.500000 +v 1.500000 -1.211657 1.500000 +v 1.500000 -0.000000 1.500000 +v 1.500000 0.000000 -1.500000 +v 1.500000 -1.211656 -1.500000 +v 1.236416 -1.211656 -1.500000 +v 1.236416 0.000000 -1.500000 +v -1.236416 0.000000 -1.500000 +v -1.236416 -1.211656 -1.500000 +v -1.500000 -1.211656 -1.500000 +v -1.500000 0.000000 -1.500000 +v -1.500000 -0.000000 1.500000 +v -1.500000 -1.211657 1.500000 +v -1.236416 -1.211657 1.500000 +v -1.236416 -0.000000 1.500000 +v -1.236416 -0.000000 1.209337 +v -1.236416 -1.211657 1.209337 +v -1.500000 -1.211657 1.209337 +v -1.500000 -0.000000 1.209337 +v -1.500000 1.211656 1.500000 +v -1.500000 1.211656 1.209338 +v -1.236416 1.211656 1.209338 +v -1.236416 1.211656 1.500000 +v -1.500000 1.211657 -1.500000 +v -1.236416 1.211657 -1.500000 +v 1.236416 1.211657 -1.500000 +v 1.500000 1.211657 -1.500000 +v 1.500000 1.211656 1.500000 +v 1.236416 1.211656 1.500000 +v 0.000000 -1.500000 1.209337 +v -1.236416 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 1.211656 1.209338 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 0.000000 1.211656 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v 0.000000 -1.500000 -1.500000 +v -1.236416 -1.500000 -1.500000 +v 0.000000 -1.211656 -1.500000 +v 0.000000 -1.500000 -1.209338 +v -1.236416 -1.500000 -1.209338 +v 1.236416 -1.211657 -0.000000 +v 1.236416 -1.211656 -1.209338 +v 1.236416 -1.500000 -1.209338 +v 1.236416 -1.500000 -0.000000 +v 1.500000 -1.500000 -0.000000 +v 1.500000 -1.500000 -1.209338 +v 1.500000 -1.211656 -1.209338 +v 1.500000 -1.211657 -0.000000 +v 1.500000 -1.500000 1.209337 +v 1.236416 -1.500000 1.209337 +v -1.236416 -1.500000 -0.000000 +v -1.500000 -1.500000 1.209337 +v -1.500000 -1.500000 -0.000000 +v -1.500000 -1.500000 -1.209338 +v -1.236416 -1.211657 -0.000000 +v -1.236416 -1.211656 -1.209338 +v -1.500000 -1.211656 -1.209338 +v -1.500000 -1.211657 -0.000000 +v -1.500000 1.211657 0.000000 +v -1.500000 1.211657 -1.209337 +v -1.236416 1.211657 -1.209337 +v -1.236416 1.211657 0.000000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 1.236416 1.211657 -1.209337 +v 1.500000 1.211657 -1.209337 +v 1.236416 0.000000 -1.209337 +v 1.500000 0.000000 -1.209337 +v -1.500000 0.000000 -1.209337 +v -1.236416 0.000000 -1.209337 +v 0.000000 -1.211656 -1.209338 +v 0.000000 1.211657 -1.209337 +v 0.000000 1.211657 -1.500000 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v -1.500000 -1.500000 1.500000 +v -1.236416 -1.500000 1.500000 +v 0.000000 -1.211657 1.500000 +v -1.500000 -1.500000 -1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.500000 1.500000 +v 1.500000 -1.500000 1.500000 +v 1.236416 -1.500000 -1.500000 +v 1.500000 -1.500000 -1.500000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v 0.000000 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 -1.211657 1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.211657 1.209337 +v -1.236416 -1.211657 1.209337 +v 0.000000 -1.211657 1.209337 +vn 0.000000 -1.000000 -0.000001 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000001 +vn 0.000000 -0.000001 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 1//1 2//1 3//1 4//1 +f 2//2 1//2 5//2 6//2 +f 4//3 3//3 7//3 8//3 +f 9//4 10//4 11//4 12//4 +f 13//5 14//5 15//5 16//5 +f 17//4 18//4 19//4 20//4 +f 21//4 22//4 23//4 24//4 +f 25//5 26//5 27//5 28//5 +f 29//4 30//4 31//4 32//4 +f 32//3 31//3 26//3 25//3 +f 25//3 33//3 34//3 32//3 +f 32//6 34//6 35//6 29//6 +f 28//5 36//5 33//5 25//5 +f 24//4 37//4 38//4 21//4 +f 20//4 39//4 40//4 17//4 +f 16//5 41//5 42//5 13//5 +f 12//6 3//6 2//6 9//6 +f 9//2 2//2 41//2 16//2 +f 13//3 42//3 3//3 12//3 +f 43//4 44//4 30//4 45//4 +f 46//4 35//4 47//4 48//4 +f 99//7 100//7 133//7 132//7 +f 50//5 49//5 36//5 51//5 +f 51//5 42//5 52//5 50//5 +f 100//7 102//7 135//7 133//7 +f 48//4 7//4 3//4 46//4 +f 46//8 3//8 42//8 51//8 +f 49//5 53//5 33//5 36//5 +f 42//5 41//5 54//5 52//5 +f 86//7 53//7 122//7 128//7 +f 41//2 2//2 6//2 54//2 +f 55//4 56//4 22//4 57//4 +f 58//8 59//8 56//8 55//8 +f 60//3 61//3 62//3 63//3 +f 64//2 65//2 66//2 67//2 +f 67//9 66//9 61//9 60//9 +f 63//8 62//8 65//8 64//8 +f 64//8 68//8 69//8 63//8 +f 70//8 44//8 71//8 72//8 +f 72//8 73//8 59//8 70//8 +f 74//9 75//9 76//9 77//9 +f 78//8 79//8 80//8 81//8 +f 5//7 87//7 129//7 113//7 +f 54//7 6//7 114//7 123//7 +f 48//7 47//7 117//7 118//7 +f 87//7 103//7 136//7 129//7 +f 90//8 1//8 4//8 89//8 +f 1//2 90//2 87//2 5//2 +f 8//3 88//3 89//3 4//3 +f 20//3 19//3 61//3 91//3 +f 92//2 66//2 18//2 17//2 +f 91//10 61//10 66//10 92//10 +f 93//10 76//10 75//10 94//10 +f 24//3 23//3 76//3 93//3 +f 94//2 75//2 22//2 21//2 +f 21//2 38//2 80//2 94//2 +f 57//11 22//11 75//11 95//11 +f 96//8 80//8 38//8 97//8 +f 93//3 79//3 37//3 24//3 +f 94//5 80//5 79//5 93//5 +f 92//5 90//5 89//5 91//5 +f 17//2 40//2 90//2 92//2 +f 91//3 89//3 39//3 20//3 +f 95//5 75//5 59//5 58//5 +f 98//5 83//5 80//5 96//5 +f 103//7 101//7 134//7 136//7 +f 97//4 38//4 100//4 99//4 +f 99//4 101//4 39//4 97//4 +f 6//7 5//7 113//7 114//7 +f 96//5 89//5 88//5 98//5 +f 97//8 39//8 89//8 96//8 +f 38//4 37//4 102//4 100//4 +f 101//4 103//4 40//4 39//4 +f 7//7 48//7 118//7 115//7 +f 103//2 87//2 90//2 40//2 +f 26//3 31//3 71//3 104//3 +f 71//8 44//8 105//8 104//8 +f 28//2 27//2 30//2 29//2 +f 29//2 35//2 36//2 28//2 +f 74//2 30//2 44//2 70//2 +f 72//3 71//3 31//3 77//3 +f 77//11 31//11 30//11 74//11 +f 81//1 35//1 34//1 78//1 +f 78//3 34//3 86//3 85//3 +f 82//2 47//2 35//2 81//2 +f 45//11 30//11 27//11 106//11 +f 51//8 36//8 35//8 46//8 +f 102//7 84//7 126//7 135//7 +f 53//3 86//3 34//3 33//3 +f 107//3 73//3 76//3 23//3 +f 107//8 56//8 59//8 73//8 +f 70//2 59//2 75//2 74//2 +f 77//3 76//3 73//3 72//3 +f 85//3 84//3 79//3 78//3 +f 81//2 80//2 83//2 82//2 +f 88//7 8//7 116//7 130//7 +f 37//3 79//3 84//3 102//3 +f 60//11 11//11 10//11 67//11 +f 67//2 10//2 68//2 64//2 +f 63//3 69//3 11//3 60//3 +f 16//2 15//2 10//2 9//2 +f 12//3 11//3 14//3 13//3 +f 108//8 105//8 44//8 43//8 +f 106//5 27//5 105//5 108//5 +f 108//5 109//5 14//5 106//5 +f 43//8 69//8 109//8 108//8 +f 45//4 11//4 69//4 43//4 +f 106//11 14//11 11//11 45//11 +f 27//5 26//5 104//5 105//5 +f 109//5 110//5 15//5 14//5 +f 110//8 109//8 69//8 68//8 +f 110//2 68//2 10//2 15//2 +f 57//4 19//4 111//4 55//4 +f 55//8 111//8 62//8 58//8 +f 58//5 62//5 61//5 95//5 +f 95//11 61//11 19//11 57//11 +f 56//4 107//4 23//4 22//4 +f 19//4 18//4 112//4 111//4 +f 65//8 62//8 111//8 112//8 +f 18//2 66//2 65//2 112//2 +f 118//11 117//11 119//11 120//11 +f 120//11 121//11 115//11 118//11 +f 114//11 115//11 121//11 123//11 +f 124//11 125//11 126//11 127//11 +f 127//11 128//11 117//11 124//11 +f 116//11 115//11 114//11 113//11 +f 113//11 129//11 130//11 116//11 +f 132//11 133//11 125//11 131//11 +f 131//11 130//11 134//11 132//11 +f 136//11 134//11 130//11 129//11 +f 122//11 119//11 117//11 128//11 +f 126//11 125//11 133//11 135//11 +f 82//7 83//7 125//7 124//7 +f 49//7 50//7 120//7 119//7 +f 84//7 85//7 127//7 126//7 +f 50//7 52//7 121//7 120//7 +f 52//7 54//7 123//7 121//7 +f 53//7 49//7 119//7 122//7 +f 8//7 7//7 115//7 116//7 +f 85//7 86//7 128//7 127//7 +f 83//7 98//7 131//7 125//7 +f 47//7 82//7 124//7 117//7 +f 101//7 99//7 132//7 134//7 +f 98//7 88//7 130//7 131//7 +f 108//7 106//7 139//7 140//7 +f 45//7 43//7 137//7 138//7 +f 106//7 45//7 138//7 139//7 +f 43//7 108//7 140//7 137//7 +f 30//7 45//7 143//7 142//7 +f 45//7 11//7 141//7 143//7 +g holeycube.001 +v 0.037848 0.053616 0.680965 +v 0.414385 -0.152030 0.676229 +v 0.382376 -0.209100 0.609416 +v 0.005839 -0.003453 0.614153 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.558694 0.119124 0.375479 +v 0.703003 0.390278 0.074730 +v 0.670994 0.333208 0.007917 +v 0.526685 0.062054 0.308667 +v 0.617185 0.012627 0.307529 +v 0.761494 0.283781 0.006779 +v 0.793503 0.340851 0.073591 +v 0.649194 0.069697 0.374341 +v -0.284880 0.579845 0.386090 +v -0.140571 0.850998 0.085340 +v -0.172580 0.793929 0.018528 +v -0.316889 0.522775 0.319277 +v -0.617185 -0.012627 -0.307529 +v -0.472876 0.258527 -0.608278 +v -0.504885 0.201457 -0.675091 +v -0.649194 -0.069697 -0.374341 +v 0.284880 -0.579845 -0.386090 +v 0.429189 -0.308690 -0.686840 +v 0.461198 -0.251621 -0.620027 +v 0.316889 -0.522775 -0.319277 +v 0.226389 -0.473348 -0.318139 +v 0.370698 -0.202194 -0.618889 +v 0.338689 -0.259263 -0.685701 +v 0.194380 -0.530418 -0.384952 +v 0.140571 -0.850998 -0.085340 +v 0.050071 -0.801571 -0.084202 +v 0.082080 -0.744502 -0.017389 +v 0.172580 -0.793929 -0.018528 +v -0.793503 -0.340851 -0.073591 +v -0.761494 -0.283781 -0.006779 +v -0.461198 0.251621 0.620027 +v -0.429189 0.308690 0.686840 +v 0.504885 -0.201457 0.675091 +v 0.472876 -0.258527 0.608278 +v 0.555187 0.130035 -0.377057 +v 0.405040 -0.137666 -0.690460 +v 0.520846 0.065507 -0.305486 +v 0.232228 -0.476801 0.296014 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.322728 -0.526228 0.294875 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.288386 0.590756 -0.366446 +v -0.438534 0.323055 -0.679849 +v -0.322728 0.526228 -0.294875 +v -0.197886 0.541329 -0.367584 +v -0.348034 0.273628 -0.680987 +v 0.294457 0.538855 0.012653 +v -0.082080 0.744502 0.017389 +v -0.047738 0.809030 -0.054181 +v 0.328799 0.603383 -0.058918 +v 0.360808 0.660452 0.007895 +v -0.015729 0.866099 0.012631 +v -0.050071 0.801571 0.084202 +v 0.326466 0.595925 0.079466 +v 0.737345 0.454805 0.003159 +v 0.705335 0.397736 -0.063654 +v 0.028503 0.067981 -0.685724 +v 0.373030 -0.194736 -0.757272 +v -0.003506 0.010911 -0.752536 +v -0.380043 0.216558 -0.747800 +v -0.005839 0.003453 -0.614153 +v -0.382376 0.209100 -0.609416 +v -0.414385 0.152030 -0.676229 +v -0.037848 -0.053616 -0.680965 +v -0.326466 -0.595925 -0.079466 +v -0.703003 -0.390278 -0.074730 +v -0.670994 -0.333208 -0.007917 +v -0.294457 -0.538855 -0.012653 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.370698 0.202194 0.618889 +v -0.338689 0.259263 0.685701 +v -0.226389 0.473348 0.318139 +v -0.194380 0.530418 0.384952 +v -0.558694 -0.119124 -0.375479 +v -0.526685 -0.062054 -0.308667 +v -0.232228 0.476801 -0.296014 +v -0.520846 -0.065507 0.305486 +v -0.611346 -0.016080 0.306624 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.463531 -0.244163 -0.758410 +v 0.495540 -0.187093 -0.691598 +v 0.611346 0.016080 -0.306624 +v -0.470543 0.265985 -0.746662 +v 0.645688 0.080608 -0.378195 +v 0.795836 0.348309 -0.064792 +v 0.827845 0.405378 0.002021 +v -0.138238 0.858457 -0.053043 +v -0.106229 0.915526 0.013769 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.555187 0.130035 -0.377057 +v 0.520846 0.065507 -0.305486 +v 0.611346 0.016080 -0.306624 +v 0.645688 0.080608 -0.378195 +v 0.670994 0.333208 0.007917 +v 0.370698 -0.202194 -0.618889 +v 0.520846 0.065507 -0.305486 +vn 0.335692 0.630762 -0.699607 +vn 0.342281 0.610259 0.714442 +vn -0.342282 -0.610259 -0.714442 +vn -0.877584 0.479296 0.011038 +vn 0.877584 -0.479296 -0.011038 +vn -0.877584 0.479295 0.011038 +vn -0.342281 -0.610259 -0.714442 +vn -0.877584 0.479295 0.011039 +vn 0.877584 -0.479295 -0.011038 +vn 0.335693 0.630761 -0.699607 +vn -0.335692 -0.630762 0.699607 +vn 0.342282 0.610259 0.714442 +vn 0.877584 -0.479295 -0.011039 +vn -0.335693 -0.630761 0.699607 +vn -0.877584 0.479296 0.011039 +vn 0.335693 0.630761 -0.699608 +vn 0.877584 -0.479296 -0.011039 +vn -0.335693 -0.630761 0.699608 +s off +f 144//12 145//12 146//12 147//12 +f 145//13 144//13 148//13 149//13 +f 147//14 146//14 150//14 151//14 +f 152//15 153//15 154//15 155//15 +f 156//16 157//16 158//16 159//16 +f 160//15 161//15 162//15 163//15 +f 164//17 165//17 166//17 167//17 +f 168//16 169//16 170//16 171//16 +f 172//15 173//15 174//15 175//15 +f 175//18 174//18 169//18 168//18 +f 168//14 176//14 177//14 175//14 +f 175//19 177//19 178//19 172//19 +f 171//16 179//16 176//16 168//16 +f 167//15 180//15 181//15 164//15 +f 163//15 182//15 183//15 160//15 +f 159//20 184//20 185//20 156//20 +f 155//19 146//19 145//19 152//19 +f 152//13 145//13 184//13 159//13 +f 156//18 185//18 146//18 155//18 +f 186//15 187//15 173//15 188//15 +f 189//15 178//15 190//15 191//15 +f 242//7 243//7 276//7 275//7 +f 193//16 192//16 179//16 194//16 +f 194//16 185//16 195//16 193//16 +f 243//7 245//7 278//7 276//7 +f 191//15 150//15 146//15 189//15 +f 189//21 146//21 185//21 194//21 +f 192//16 196//16 176//16 179//16 +f 185//16 184//16 197//16 195//16 +f 229//7 196//7 265//7 271//7 +f 184//13 145//13 149//13 197//13 +f 198//15 199//15 165//15 200//15 +f 201//21 202//21 199//21 198//21 +f 203//18 204//18 205//18 206//18 +f 207//13 208//13 209//13 210//13 +f 210//22 209//22 204//22 203//22 +f 206//21 205//21 208//21 207//21 +f 207//21 211//21 212//21 206//21 +f 213//21 187//21 214//21 215//21 +f 215//21 216//21 202//21 213//21 +f 217//22 218//22 219//22 220//22 +f 221//21 222//21 223//21 224//21 +f 148//7 230//7 272//7 256//7 +f 197//7 149//7 257//7 266//7 +f 191//7 190//7 260//7 261//7 +f 230//7 246//7 279//7 272//7 +f 233//21 144//21 147//21 232//21 +f 144//13 233//13 230//13 148//13 +f 151//14 231//14 232//14 147//14 +f 163//18 162//18 204//18 234//18 +f 235//23 209//23 161//23 160//23 +f 234//24 204//24 209//24 235//24 +f 236//24 219//24 218//24 237//24 +f 167//18 166//18 219//18 236//18 +f 237//13 218//13 165//13 164//13 +f 164//13 181//13 223//13 237//13 +f 200//25 165//25 218//25 238//25 +f 239//21 223//21 181//21 240//21 +f 236//14 222//14 180//14 167//14 +f 237//16 223//16 222//16 236//16 +f 235//16 233//16 232//16 234//16 +f 160//13 183//13 233//13 235//13 +f 234//18 232//18 182//18 163//18 +f 238//16 218//16 202//16 201//16 +f 241//16 226//16 223//16 239//16 +f 246//7 244//7 277//7 279//7 +f 240//15 181//15 243//15 242//15 +f 242//15 244//15 182//15 240//15 +f 149//7 148//7 256//7 257//7 +f 239//16 232//16 231//16 241//16 +f 240//21 182//21 232//21 239//21 +f 181//26 180//26 245//26 243//26 +f 244//15 246//15 183//15 182//15 +f 150//7 191//7 261//7 258//7 +f 246//13 230//13 233//13 183//13 +f 169//18 174//18 214//18 247//18 +f 214//21 187//21 248//21 247//21 +f 171//13 170//13 173//13 172//13 +f 172//13 178//13 179//13 171//13 +f 217//23 173//23 187//23 213//23 +f 215//18 214//18 174//18 220//18 +f 220//25 174//25 173//25 217//25 +f 224//12 178//12 177//12 221//12 +f 221//18 177//18 229//18 228//18 +f 225//13 190//13 178//13 224//13 +f 188//25 173//25 170//25 249//25 +f 194//21 179//21 178//21 189//21 +f 245//7 227//7 269//7 278//7 +f 196//14 229//14 177//14 176//14 +f 250//18 216//18 219//18 166//18 +f 250//27 199//27 202//27 216//27 +f 213//23 202//23 218//23 217//23 +f 220//18 219//18 216//18 215//18 +f 228//18 227//18 222//18 221//18 +f 224//13 223//13 226//13 225//13 +f 231//7 151//7 259//7 273//7 +f 180//14 222//14 227//14 245//14 +f 203//25 154//25 153//25 210//25 +f 210//13 153//13 211//13 207//13 +f 206//18 212//18 154//18 203//18 +f 159//23 158//23 153//23 152//23 +f 155//18 154//18 157//18 156//18 +f 251//21 248//21 187//21 186//21 +f 249//16 170//16 248//16 251//16 +f 251//16 252//16 157//16 249//16 +f 186//21 212//21 252//21 251//21 +f 188//15 154//15 212//15 186//15 +f 249//25 157//25 154//25 188//25 +f 170//16 169//16 247//16 248//16 +f 252//28 253//28 158//28 157//28 +f 253//21 252//21 212//21 211//21 +f 253//23 211//23 153//23 158//23 +f 200//15 162//15 254//15 198//15 +f 198//21 254//21 205//21 201//21 +f 201//16 205//16 204//16 238//16 +f 238//25 204//25 162//25 200//25 +f 199//15 250//15 166//15 165//15 +f 162//15 161//15 255//15 254//15 +f 208//21 205//21 254//21 255//21 +f 161//23 209//23 208//23 255//23 +f 261//25 260//25 262//25 263//25 +f 263//25 264//25 258//25 261//25 +f 257//29 258//29 264//29 266//29 +f 267//25 268//25 269//25 270//25 +f 270//25 271//25 260//25 267//25 +f 259//25 258//25 257//25 256//25 +f 256//25 272//25 273//25 259//25 +f 275//25 276//25 268//25 274//25 +f 274//25 273//25 277//25 275//25 +f 279//25 277//25 273//25 272//25 +f 265//25 262//25 260//25 271//25 +f 269//25 268//25 276//25 278//25 +f 225//7 226//7 268//7 267//7 +f 192//7 193//7 263//7 262//7 +f 227//7 228//7 270//7 269//7 +f 193//7 195//7 264//7 263//7 +f 195//7 197//7 266//7 264//7 +f 196//7 192//7 262//7 265//7 +f 151//7 150//7 258//7 259//7 +f 228//7 229//7 271//7 270//7 +f 226//7 241//7 274//7 268//7 +f 190//7 225//7 267//7 260//7 +f 244//7 242//7 275//7 277//7 +f 241//7 231//7 273//7 274//7 +f 251//7 249//7 282//7 283//7 +f 188//7 186//7 280//7 281//7 +f 249//7 188//7 281//7 282//7 +f 186//7 251//7 283//7 280//7 +f 173//7 188//7 286//7 285//7 +f 188//7 154//7 284//7 286//7 +g holeycube.002 +v 0.369385 2.003562 1.792544 +v 0.963329 0.880686 2.925211 +v 0.707927 0.635014 2.815589 +v 0.113983 1.757890 1.682922 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v 2.047380 0.275193 1.756502 +v 3.131433 -0.330301 0.587792 +v 2.876031 -0.575973 0.478171 +v 1.791978 0.029521 1.646880 +v 1.934732 -0.240361 1.919116 +v 3.018785 -0.845855 0.750406 +v 3.274187 -0.600183 0.860028 +v 2.190134 0.005311 2.028738 +v 0.716742 2.790825 -0.781068 +v 1.800794 2.185331 -1.949777 +v 1.545392 1.939659 -2.059399 +v 0.461340 2.545153 -0.890690 +v -1.934732 0.240361 -1.919116 +v -0.850680 -0.365133 -3.087824 +v -1.106082 -0.610805 -3.197446 +v -2.190134 -0.005311 -2.028738 +v -0.716742 -2.790825 0.781068 +v 0.367311 -3.396319 -0.387641 +v 0.622713 -3.150647 -0.278019 +v -0.461340 -2.545153 0.890690 +v -0.604093 -2.275271 0.618455 +v 0.479959 -2.880765 -0.550255 +v 0.224557 -3.126437 -0.659877 +v -0.859495 -2.520943 0.508833 +v -1.800794 -2.185331 1.949777 +v -1.943547 -1.915450 1.677542 +v -1.688145 -1.669778 1.787164 +v -1.545392 -1.939659 2.059399 +v -3.274187 0.600183 -0.860028 +v -3.018785 0.845855 -0.750406 +v -0.622713 3.150647 0.278019 +v -0.367311 3.396319 0.387641 +v 1.106082 0.610805 3.197446 +v 0.850680 0.365133 3.087824 +v 1.935972 -1.872461 -0.314165 +v 0.737936 -3.024857 -0.828377 +v 1.677995 -1.728369 -0.036042 +v -0.490109 -0.517382 2.301377 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v -0.347356 -0.787263 2.573611 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v 0.605333 0.643171 -2.851735 +v -0.592703 -0.509225 -3.365948 +v 0.347356 0.787263 -2.573611 +v 0.748086 0.373290 -2.579500 +v -0.449950 -0.779106 -3.093713 +v 2.282089 0.546902 -0.654497 +v 1.688145 1.669778 -1.787164 +v 1.946122 1.525685 -2.065288 +v 2.540065 0.402810 -0.932619 +v 2.795467 0.648482 -0.822998 +v 2.201524 1.771358 -1.955666 +v 1.943547 1.915450 -1.677542 +v 2.537491 0.792574 -0.544875 +v 3.389409 -0.474393 0.309670 +v 3.134007 -0.720065 0.200048 +v 0.143993 -1.901982 -1.961045 +v 0.482534 -3.270529 -0.937999 +v -0.111409 -2.147654 -2.070667 +v -0.705351 -1.024778 -3.203335 +v -0.113983 -1.757890 -1.682922 +v -0.707927 -0.635014 -2.815589 +v -0.963329 -0.880686 -2.925211 +v -0.369385 -2.003562 -1.792544 +v -2.537491 -0.792574 0.544875 +v -3.131433 0.330301 -0.587792 +v -2.876031 0.575973 -0.478171 +v -2.282089 -0.546902 0.654497 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -0.479959 2.880765 0.550255 +v -0.224557 3.126437 0.659877 +v 0.604093 2.275271 -0.618455 +v 0.859495 2.520943 -0.508833 +v -2.047380 -0.275193 -1.756502 +v -1.791978 -0.029521 -1.646880 +v 0.490109 0.517382 -2.301377 +v -1.677995 1.728369 0.036042 +v -1.820749 1.998251 -0.236193 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 0.625287 -3.540411 -0.665764 +v 0.880689 -3.294739 -0.556142 +v 1.820749 -1.998251 0.236193 +v -0.848105 -0.754897 -3.475569 +v 2.078725 -2.142343 -0.041929 +v 3.276761 -0.989947 0.472284 +v 3.532163 -0.744275 0.581905 +v 1.803369 1.795566 -2.337522 +v 2.058771 2.041239 -2.227901 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 1.935972 -1.872461 -0.314165 +v 1.677995 -1.728369 -0.036042 +v 1.820749 -1.998251 0.236193 +v 2.078725 -2.142343 -0.041929 +v 2.876031 -0.575973 0.478171 +v 0.479959 -2.880765 -0.550255 +v 1.677995 -1.728369 -0.036042 +vn 0.635737 -0.355088 -0.685384 +vn 0.688513 0.662283 0.295519 +vn -0.688513 -0.662283 -0.295518 +vn -0.348983 0.659767 -0.665521 +vn 0.348982 -0.659767 0.665521 +vn -0.348982 0.659767 -0.665521 +vn 0.348982 -0.659768 0.665521 +vn -0.688513 -0.662283 -0.295519 +vn 0.348983 -0.659767 0.665521 +vn -0.348982 0.659768 -0.665521 +vn 0.688513 0.662283 0.295518 +vn 0.635737 -0.355089 -0.685383 +vn -0.635737 0.355088 0.685384 +vn 0.688512 0.662283 0.295519 +vn -0.635737 0.355089 0.685383 +vn -0.688512 -0.662283 -0.295519 +vn 0.635737 -0.355089 -0.685384 +vn -0.635737 0.355089 0.685384 +s off +f 287//30 288//30 289//30 290//30 +f 288//31 287//31 291//31 292//31 +f 290//32 289//32 293//32 294//32 +f 295//33 296//33 297//33 298//33 +f 299//34 300//34 301//34 302//34 +f 303//33 304//33 305//33 306//33 +f 307//35 308//35 309//35 310//35 +f 311//36 312//36 313//36 314//36 +f 315//35 316//35 317//35 318//35 +f 318//37 317//37 312//37 311//37 +f 311//37 319//37 320//37 318//37 +f 318//33 320//33 321//33 315//33 +f 314//38 322//38 319//38 311//38 +f 310//35 323//35 324//35 307//35 +f 306//39 325//39 326//39 303//39 +f 302//34 327//34 328//34 299//34 +f 298//33 289//33 288//33 295//33 +f 295//40 288//40 327//40 302//40 +f 299//37 328//37 289//37 298//37 +f 329//33 330//33 316//33 331//33 +f 332//33 321//33 333//33 334//33 +f 385//7 386//7 419//7 418//7 +f 336//38 335//38 322//38 337//38 +f 337//38 328//38 338//38 336//38 +f 386//7 388//7 421//7 419//7 +f 334//33 293//33 289//33 332//33 +f 332//41 289//41 328//41 337//41 +f 335//38 339//38 319//38 322//38 +f 328//38 327//38 340//38 338//38 +f 372//7 339//7 408//7 414//7 +f 327//31 288//31 292//31 340//31 +f 341//33 342//33 308//33 343//33 +f 344//41 345//41 342//41 341//41 +f 346//32 347//32 348//32 349//32 +f 350//40 351//40 352//40 353//40 +f 353//42 352//42 347//42 346//42 +f 349//41 348//41 351//41 350//41 +f 350//41 354//41 355//41 349//41 +f 356//41 330//41 357//41 358//41 +f 358//41 359//41 345//41 356//41 +f 360//42 361//42 362//42 363//42 +f 364//41 365//41 366//41 367//41 +f 291//7 373//7 415//7 399//7 +f 340//7 292//7 400//7 409//7 +f 334//7 333//7 403//7 404//7 +f 373//7 389//7 422//7 415//7 +f 376//41 287//41 290//41 375//41 +f 287//43 376//43 373//43 291//43 +f 294//37 374//37 375//37 290//37 +f 306//37 305//37 347//37 377//37 +f 378//31 352//31 304//31 303//31 +f 377//38 347//38 352//38 378//38 +f 379//38 362//38 361//38 380//38 +f 310//32 309//32 362//32 379//32 +f 380//31 361//31 308//31 307//31 +f 307//31 324//31 366//31 380//31 +f 343//44 308//44 361//44 381//44 +f 382//41 366//41 324//41 383//41 +f 379//32 365//32 323//32 310//32 +f 380//38 366//38 365//38 379//38 +f 378//34 376//34 375//34 377//34 +f 303//31 326//31 376//31 378//31 +f 377//37 375//37 325//37 306//37 +f 381//38 361//38 345//38 344//38 +f 384//38 369//38 366//38 382//38 +f 389//7 387//7 420//7 422//7 +f 383//33 324//33 386//33 385//33 +f 385//33 387//33 325//33 383//33 +f 292//7 291//7 399//7 400//7 +f 382//38 375//38 374//38 384//38 +f 383//41 325//41 375//41 382//41 +f 324//33 323//33 388//33 386//33 +f 387//35 389//35 326//35 325//35 +f 293//7 334//7 404//7 401//7 +f 389//43 373//43 376//43 326//43 +f 312//45 317//45 357//45 390//45 +f 357//46 330//46 391//46 390//46 +f 314//31 313//31 316//31 315//31 +f 315//31 321//31 322//31 314//31 +f 360//31 316//31 330//31 356//31 +f 358//45 357//45 317//45 363//45 +f 363//44 317//44 316//44 360//44 +f 367//30 321//30 320//30 364//30 +f 364//32 320//32 372//32 371//32 +f 368//40 333//40 321//40 367//40 +f 331//44 316//44 313//44 392//44 +f 337//46 322//46 321//46 332//46 +f 388//7 370//7 412//7 421//7 +f 339//32 372//32 320//32 319//32 +f 393//37 359//37 362//37 309//37 +f 393//41 342//41 345//41 359//41 +f 356//40 345//40 361//40 360//40 +f 363//37 362//37 359//37 358//37 +f 371//32 370//32 365//32 364//32 +f 367//40 366//40 369//40 368//40 +f 374//7 294//7 402//7 416//7 +f 323//32 365//32 370//32 388//32 +f 346//44 297//44 296//44 353//44 +f 353//40 296//40 354//40 350//40 +f 349//32 355//32 297//32 346//32 +f 302//40 301//40 296//40 295//40 +f 298//37 297//37 300//37 299//37 +f 394//41 391//41 330//41 329//41 +f 392//38 313//38 391//38 394//38 +f 394//38 395//38 300//38 392//38 +f 329//41 355//41 395//41 394//41 +f 331//33 297//33 355//33 329//33 +f 392//44 300//44 297//44 331//44 +f 313//34 312//34 390//34 391//34 +f 395//38 396//38 301//38 300//38 +f 396//41 395//41 355//41 354//41 +f 396//40 354//40 296//40 301//40 +f 343//33 305//33 397//33 341//33 +f 341//41 397//41 348//41 344//41 +f 344//38 348//38 347//38 381//38 +f 381//47 347//47 305//47 343//47 +f 342//33 393//33 309//33 308//33 +f 305//33 304//33 398//33 397//33 +f 351//41 348//41 397//41 398//41 +f 304//40 352//40 351//40 398//40 +f 404//44 403//44 405//44 406//44 +f 406//44 407//44 401//44 404//44 +f 400//44 401//44 407//44 409//44 +f 410//44 411//44 412//44 413//44 +f 413//44 414//44 403//44 410//44 +f 402//44 401//44 400//44 399//44 +f 399//44 415//44 416//44 402//44 +f 418//44 419//44 411//44 417//44 +f 417//44 416//44 420//44 418//44 +f 422//47 420//47 416//47 415//47 +f 408//44 405//44 403//44 414//44 +f 412//44 411//44 419//44 421//44 +f 368//7 369//7 411//7 410//7 +f 335//7 336//7 406//7 405//7 +f 370//7 371//7 413//7 412//7 +f 336//7 338//7 407//7 406//7 +f 338//7 340//7 409//7 407//7 +f 339//7 335//7 405//7 408//7 +f 294//7 293//7 401//7 402//7 +f 371//7 372//7 414//7 413//7 +f 369//7 384//7 417//7 411//7 +f 333//7 368//7 410//7 403//7 +f 387//7 385//7 418//7 420//7 +f 384//7 374//7 416//7 417//7 +f 394//7 392//7 425//7 426//7 +f 331//7 329//7 423//7 424//7 +f 392//7 331//7 424//7 425//7 +f 329//7 394//7 426//7 423//7 +f 316//7 331//7 429//7 428//7 +f 331//7 297//7 427//7 429//7 diff --git a/examples/15-shadowmaps-simple/makefile b/examples/15-shadowmaps-simple/makefile new file mode 100644 index 000000000..6525ae16a --- /dev/null +++ b/examples/15-shadowmaps-simple/makefile @@ -0,0 +1,22 @@ +# +# Copyright 2013 Dario Manesku. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime +BUILD_DIR=../../.build + +include $(BGFX_DIR)/premake/shader.mk + +geometry: ../runtime/meshes/column.bin + +../runtime/meshes/column.bin: column.obj + ../../tools/bin/geometryc -f column.obj -o ../runtime/meshes/column.bin --packnormal 1 + +rebuild: + @make -s --no-print-directory TARGET=0 clean all + @make -s --no-print-directory TARGET=1 clean all + @make -s --no-print-directory TARGET=2 clean all + @make -s --no-print-directory TARGET=3 clean all + @make -s --no-print-directory TARGET=4 clean all diff --git a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp new file mode 100644 index 000000000..0a22c2d38 --- /dev/null +++ b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp @@ -0,0 +1,670 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include + +#include "common.h" + +#include +#include +#include +#include "entry/entry.h" +#include "fpumath.h" + +#define RENDER_PASS_0 0 +#define RENDER_PASS_1 1 + +uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w) +{ + union + { + uint32_t ui32; + uint8_t arr[4]; + } un; + + un.arr[0] = _x; + un.arr[1] = _y; + un.arr[2] = _z; + un.arr[3] = _w; + + return un.ui32; +} + +uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f) +{ + const uint8_t xx = uint8_t(_x*127.0f + 128.0f); + const uint8_t yy = uint8_t(_y*127.0f + 128.0f); + const uint8_t zz = uint8_t(_z*127.0f + 128.0f); + const uint8_t ww = uint8_t(_w*127.0f + 128.0f); + return packUint32(xx, yy, zz, ww); +} + +struct PosNormalVertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_normal; +}; + +static const float s_texcoord = 5.0f; +static const uint32_t s_numHPlaneVertices = 4; +static PosNormalVertex s_hplaneVertices[s_numHPlaneVertices] = +{ + { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) }, + { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f) }, +}; + +static const uint32_t s_numPlaneIndices = 6; +static const uint16_t s_planeIndices[s_numPlaneIndices] = +{ + 0, 1, 2, + 1, 3, 2, +}; + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; +static float s_texelHalf = 0.0f; +static bgfx::RenderTargetHandle s_rtShadowMap; +static bgfx::UniformHandle u_shadowMap; + +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); + size_t ignore = fread(mem->data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + 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; +} + +void mtxScaleRotateTranslate(float* _result + , const float _scaleX + , const float _scaleY + , const float _scaleZ + , const float _rotX + , const float _rotY + , const float _rotZ + , const float _translateX + , const float _translateY + , const float _translateZ + ) +{ + float mtxRotateTranslate[16]; + float mtxScale[16]; + + mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ); + mtxRotateTranslate[12] = _translateX; + mtxRotateTranslate[13] = _translateY; + mtxRotateTranslate[14] = _translateZ; + + memset(mtxScale, 0, sizeof(float)*16); + mtxScale[0] = _scaleX; + mtxScale[5] = _scaleY; + mtxScale[10] = _scaleZ; + mtxScale[15] = 1.0f; + + mtxMul(_result, mtxScale, mtxRotateTranslate); +} + +struct Aabb +{ + float m_min[3]; + float m_max[3]; +}; + +struct Obb +{ + float m_mtx[16]; +}; + +struct Sphere +{ + float m_center[3]; + float m_radius; +}; + +struct Primitive +{ + uint32_t m_startIndex; + uint32_t m_numIndices; + uint32_t m_startVertex; + uint32_t m_numVertices; + + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; +}; + +typedef std::vector PrimitiveArray; + +struct Group +{ + Group() + { + reset(); + } + + void reset() + { + m_vbh.idx = bgfx::invalidHandle; + m_ibh.idx = bgfx::invalidHandle; + m_prims.clear(); + } + + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; + PrimitiveArray m_prims; +}; +; + +struct Mesh +{ + void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + { + Group group; + const bgfx::Memory* mem; + uint32_t size; + + size = _numVertices*_decl.getStride(); + mem = bgfx::makeRef(_vertices, size); + group.m_vbh = bgfx::createVertexBuffer(mem, _decl); + + size = _numIndices*2; + mem = bgfx::makeRef(_indices, size); + group.m_ibh = bgfx::createIndexBuffer(mem); + + //TODO: + // group.m_sphere = ... + // group.m_aabb = ... + // group.m_obb = ... + // group.m_prims = ... + + m_groups.push_back(group); + } + + void load(const char* _filePath) + { +#define BGFX_CHUNK_MAGIC_VB BX_MAKEFOURCC('V', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) + + bx::CrtFileReader reader; + reader.open(_filePath); + + Group group; + + uint32_t chunk; + while (4 == bx::read(&reader, chunk) ) + { + switch (chunk) + { + case BGFX_CHUNK_MAGIC_VB: + { + bx::read(&reader, group.m_sphere); + bx::read(&reader, group.m_aabb); + bx::read(&reader, group.m_obb); + + bx::read(&reader, m_decl); + uint16_t stride = m_decl.getStride(); + + uint16_t numVertices; + bx::read(&reader, numVertices); + const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); + bx::read(&reader, mem->data, mem->size); + + group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); + } + break; + + case BGFX_CHUNK_MAGIC_IB: + { + uint32_t numIndices; + bx::read(&reader, numIndices); + const bgfx::Memory* mem = bgfx::alloc(numIndices*2); + bx::read(&reader, mem->data, mem->size); + group.m_ibh = bgfx::createIndexBuffer(mem); + } + break; + + case BGFX_CHUNK_MAGIC_PRI: + { + uint16_t len; + bx::read(&reader, len); + + std::string material; + material.resize(len); + bx::read(&reader, const_cast(material.c_str() ), len); + + uint16_t num; + bx::read(&reader, num); + + for (uint32_t ii = 0; ii < num; ++ii) + { + bx::read(&reader, len); + + std::string name; + name.resize(len); + bx::read(&reader, const_cast(name.c_str() ), len); + + Primitive prim; + bx::read(&reader, prim.m_startIndex); + bx::read(&reader, prim.m_numIndices); + bx::read(&reader, prim.m_startVertex); + bx::read(&reader, prim.m_numVertices); + bx::read(&reader, prim.m_sphere); + bx::read(&reader, prim.m_aabb); + bx::read(&reader, prim.m_obb); + + group.m_prims.push_back(prim); + } + + m_groups.push_back(group); + group.reset(); + } + break; + + default: + DBG("%08x at %d", chunk, reader.seek() ); + break; + } + } + + reader.close(); + } + + void unload() + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + bgfx::destroyVertexBuffer(group.m_vbh); + + if (bgfx::isValid(group.m_ibh) ) + { + bgfx::destroyIndexBuffer(group.m_ibh); + } + } + m_groups.clear(); + } + + void submit(uint8_t _view, float* _mtx, bgfx::ProgramHandle _program) + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + + // Set model matrix for rendering. + bgfx::setTransform(_mtx); + bgfx::setProgram(_program); + bgfx::setIndexBuffer(group.m_ibh); + bgfx::setVertexBuffer(group.m_vbh); + + // Set shadow map. + bgfx::setTexture(4, u_shadowMap, s_rtShadowMap); + + // Set render states. + bgfx::setState(0 + |BGFX_STATE_RGB_WRITE + |BGFX_STATE_ALPHA_WRITE + |BGFX_STATE_DEPTH_WRITE + |BGFX_STATE_DEPTH_TEST_LESS + |BGFX_STATE_CULL_CCW + |BGFX_STATE_MSAA + ); + + // Submit primitive for rendering. + bgfx::submit(_view); + } + } + + bgfx::VertexDecl m_decl; + typedef std::vector GroupArray; + GroupArray m_groups; +}; + +int _main_(int /*_argc*/, char** /*_argv*/) +{ + uint32_t width = 1280; + uint32_t height = 720; + uint32_t debug = BGFX_DEBUG_TEXT; + uint32_t reset = BGFX_RESET_VSYNC; + + bgfx::init(); + bgfx::reset(width, height, reset); + + // Enable debug text. + bgfx::setDebug(debug); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + default: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + s_texelHalf = 0.5f; + 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: + case bgfx::RendererType::OpenGLES3: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + // Uniforms. + u_shadowMap = bgfx::createUniform("u_shadowMap", bgfx::UniformType::Uniform1iv); + + bgfx::UniformHandle u_lightPos = bgfx::createUniform("u_lightPos", bgfx::UniformType::Uniform4fv); + bgfx::UniformHandle u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Uniform4x4fv); + + // Programs. + bgfx::ProgramHandle progPackDepth = loadProgram("vs_smsimple_packdepth", "fs_smsimple_packdepth"); + bgfx::ProgramHandle progDraw = loadProgram("vs_smsimple_draw", "fs_smsimple_draw"); + + // Vertex declarations. + bgfx::VertexDecl PosNormalDecl; + PosNormalDecl.begin(); + PosNormalDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + PosNormalDecl.add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true); + PosNormalDecl.end(); + + // Meshes. + Mesh bunnyMesh; + Mesh cubeMesh; + Mesh hollowcubeMesh; + Mesh hplaneMesh; + bunnyMesh.load("meshes/bunny.bin"); + cubeMesh.load("meshes/cube.bin"); + hollowcubeMesh.load("meshes/hollowcube.bin"); + hplaneMesh.load(s_hplaneVertices, s_numHPlaneVertices, PosNormalDecl, s_planeIndices, s_numPlaneIndices); + + // Render targets. + uint16_t shadowMapSize = 512; + s_rtShadowMap = bgfx::createRenderTarget(shadowMapSize, shadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D16); + + // Set view and projection matrices. + float view[16]; + float proj[16]; + + const float eye[3] = { 0.0f, 30.0f, -60.0f }; + const float at[3] = { 0.0f, 5.0f, 0.0f }; + mtxLookAt(view, eye, at); + + const float aspect = float(int32_t(width) ) / float(int32_t(height) ); + mtxProj(proj, 60.0f, aspect, 0.1f, 1000.0f); + + // Time acumulators. + float timeAccumulatorLight = 0.0f; + float timeAccumulatorScene = 0.0f; + + entry::MouseState mouseState; + while (!entry::processEvents(width, height, debug, reset, &mouseState) ) + { + // Time. + 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; + const float deltaTime = float(frameTime/freq); + + // Update time accumulators. + timeAccumulatorLight += deltaTime; + timeAccumulatorScene += deltaTime; + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/15-shadowmaps-simple"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + // Setup lights. + float lightPos[4]; + lightPos[0] = -cos(timeAccumulatorLight); + lightPos[1] = -1.0f; + lightPos[2] = -sin(timeAccumulatorLight); + lightPos[3] = 0.0f; + + bgfx::setUniform(u_lightPos, lightPos); + + // Setup instance matrices. + float mtxFloor[16]; + mtxScaleRotateTranslate(mtxFloor + , 30.0f //scaleX + , 30.0f //scaleY + , 30.0f //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , 0.0f //translateY + , 0.0f //translateZ + ); + + float mtxBunny[16]; + mtxScaleRotateTranslate(mtxBunny + , 5.0f + , 5.0f + , 5.0f + , 0.0f + , float(M_PI) - timeAccumulatorScene + , 0.0f + , 15.0f + , 5.0f + , 0.0f + ); + + float mtxHollowcube[16]; + mtxScaleRotateTranslate(mtxHollowcube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 0.0f + , 10.0f + , 0.0f + ); + + float mtxCube[16]; + mtxScaleRotateTranslate(mtxCube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , -15.0f + , 5.0f + , 0.0f + ); + + // Define matrices. + float screenView[16]; + float screenProj[16]; + mtxIdentity(screenView); + mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f); + + float lightView[16]; + float lightProj[16]; + + const float eye[3] = + { + -lightPos[0], + -lightPos[1], + -lightPos[2], + }; + const float at[3] = { 0.0f, 0.0f, 0.0f }; + mtxLookAt(lightView, eye, at); + + const float area = 30.0f; + mtxOrtho(lightProj, -area, area, -area, area, -100.0f, 100.0f); + + /** + * RENDER_PASS_0 - Craft shadow map. + * RENDER_PASS_1 - Draw scene. + */ + bgfx::setViewRect(RENDER_PASS_0, 0, 0, shadowMapSize, shadowMapSize); + bgfx::setViewRect(RENDER_PASS_1, 0, 0, width, height); + + bgfx::setViewTransform(RENDER_PASS_0, lightView, lightProj); + bgfx::setViewTransform(RENDER_PASS_1, view, proj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap); + + // Clear backbuffer and shadowmap rendertarget at beginning. + bgfx::setViewClearMask(0x3, BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT, 0x303030ff, 1.0f, 0); + bgfx::submitMask(0x3); + + // Render. + + { // Craft shadow map. + + hplaneMesh.submit(RENDER_PASS_0, mtxFloor, progPackDepth); + bunnyMesh.submit(RENDER_PASS_0, mtxBunny, progPackDepth); + hollowcubeMesh.submit(RENDER_PASS_0, mtxHollowcube, progPackDepth); + cubeMesh.submit(RENDER_PASS_0, mtxCube, progPackDepth); + } + + { // Draw Scene. + + float mtxShadow[16]; //lightviewProjCrop + float lightMtx[16]; //modelLightviewProjCrop + + const float s = (s_flipV) ? 1.0f : -1.0f; //sign + + const float mtxCrop[16] = + { + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.5f, 0.5f, 1.0f, + }; + + float mtxTmp[16]; + mtxMul(mtxTmp, lightProj, mtxCrop); + mtxMul(mtxShadow, lightView, mtxTmp); + + // Floor. + mtxMul(lightMtx, mtxFloor, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + hplaneMesh.submit(RENDER_PASS_1, mtxFloor, progDraw); + + // Bunny. + mtxMul(lightMtx, mtxBunny, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + bunnyMesh.submit(RENDER_PASS_1, mtxBunny, progDraw); + + // Hollow cube. + mtxMul(lightMtx, mtxHollowcube, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + hollowcubeMesh.submit(RENDER_PASS_1, mtxHollowcube, progDraw); + + // Cube. + mtxMul(lightMtx, mtxCube, mtxShadow); + bgfx::setUniform(u_lightMtx, lightMtx); + cubeMesh.submit(RENDER_PASS_1, mtxCube, progDraw); + } + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + + } + + bunnyMesh.unload(); + cubeMesh.unload(); + hollowcubeMesh.unload(); + hplaneMesh.unload(); + + bgfx::destroyProgram(progPackDepth); + bgfx::destroyProgram(progDraw); + + bgfx::destroyRenderTarget(s_rtShadowMap); + + bgfx::destroyUniform(u_shadowMap); + bgfx::destroyUniform(u_lightPos); + bgfx::destroyUniform(u_lightMtx); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/15-shadowmaps-simple/varying.def.sc b/examples/15-shadowmaps-simple/varying.def.sc new file mode 100644 index 000000000..abd336b22 --- /dev/null +++ b/examples/15-shadowmaps-simple/varying.def.sc @@ -0,0 +1,7 @@ +vec3 v_view : TEXCOORD0 = vec3(0.0, 0.0, 0.0); +vec4 v_shadowcoord : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_position : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); + +vec3 a_position : POSITION; +vec4 a_normal : NORMAL; diff --git a/examples/15-shadowmaps-simple/vs_smsimple_draw.sc b/examples/15-shadowmaps-simple/vs_smsimple_draw.sc new file mode 100644 index 000000000..20d6f0943 --- /dev/null +++ b/examples/15-shadowmaps-simple/vs_smsimple_draw.sc @@ -0,0 +1,24 @@ +$input a_position, a_normal +$output v_view, v_normal, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + const float shadowMapOffset = 0.001; + vec3 posOffset = a_position + normal.xyz * shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); +} diff --git a/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc b/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc new file mode 100644 index 000000000..dc1024b62 --- /dev/null +++ b/examples/15-shadowmaps-simple/vs_smsimple_packdepth.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_position + +/* + * Copyright 2013 Dario Manesku. 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_position = gl_Position; +} diff --git a/examples/16-shadowmaps/common.sh b/examples/16-shadowmaps/common.sh new file mode 100644 index 000000000..29785b94e --- /dev/null +++ b/examples/16-shadowmaps/common.sh @@ -0,0 +1,235 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +float linstep(float _edge0, float _edge1, float _x) +{ + return clamp((_x-_edge0)/(_edge1-_edge0), 0.0, 1.0); +} + +float attenuation(float _dist, vec3 _attn) +{ + return 1.0 / ( _attn.x //const + + _attn.y * _dist //linear + + _attn.z * _dist * _dist //quadrantic + ); +} + +float spot(float _ldotsd, float _inner, float _outer) +{ + float inner = cos(radians(_inner)); + float outer = cos(radians(min(_outer, _inner - 0.001))); + float spot = clamp((_ldotsd - inner) / (outer - inner), 0.0, 1.0); + return spot; +} + +vec2 lit(vec3 _ld, vec3 _n, vec3 _vd, float _exp) +{ + //diff + float ndotl = dot(_n, _ld); + + //spec + vec3 r = 2.0*ndotl*_n - _ld; // reflect(_ld, _n); + float rdotv = dot(r, _vd); + float spec = step(0.0, ndotl) * pow(max(0.0, rdotv), _exp) * (2.0 + _exp)/8.0; + + return max(vec2(ndotl, spec), 0.0); +} + +struct Light +{ + vec3 l; + vec3 ld; + float attn; +}; + +Light evalLight(vec3 _v, vec4 _l, vec3 _spotDirection, float _spotInner, float _spotOuter, vec3 _attnParams) +{ + Light light; + + //directional + light.l = _l.xyz; + light.ld = -normalize(light.l); + light.attn = 1.0; + + if (0.0 != _l.w) //point or spot + { + light.l = _l.xyz - _v; + light.ld = normalize(light.l); + + float ldotsd = max(0.0, dot(-light.ld, normalize(_spotDirection))); + float falloff = spot(ldotsd, _spotOuter, _spotInner); + light.attn = attenuation(length(light.l), _attnParams) * mix(falloff, 1.0, step(90, _spotOuter)); + } + + return light; +} + +float texcoordInRange(vec2 _texcoord) +{ + bool inRange = all(greaterThan(_texcoord, vec2_splat(0.0))) + && all(lessThan (_texcoord, vec2_splat(1.0))) + ; + + return float(inRange); +} + +float hardShadow(sampler2D _sampler, vec4 _shadowCoord, float _bias) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = step(receiver, occluder); + return visibility; +} + +float PCF(sampler2D _sampler, vec4 _shadowCoord, float _bias, vec4 _pcfParams, vec2 _texelSize) +{ + float result = 0.0; + vec2 offset = _pcfParams.zw * _texelSize * _shadowCoord.w; + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-1.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(-0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(0.5, 1.5) * offset, 0.0, 0.0), _bias); + + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -1.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, -0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 0.5) * offset, 0.0, 0.0), _bias); + result += hardShadow(_sampler, _shadowCoord + vec4(vec2(1.5, 1.5) * offset, 0.0, 0.0), _bias); + + return result / 16.0; +} + +float VSM(sampler2D _sampler, vec4 _shadowCoord, float _bias, float _depthMultiplier, float _minVariance) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w * _depthMultiplier; + vec4 rgba = texture2D(_sampler, texCoord); + vec2 occluder = vec2(unpackHalfFloat(rgba.rg), unpackHalfFloat(rgba.ba)) * _depthMultiplier; + + if (receiver < occluder.x) + { + return 1.0; + } + + float variance = max(occluder.y - (occluder.x*occluder.x), _minVariance); + float d = receiver - occluder.x; + + float visibility = variance / (variance + d*d); + + return visibility; +} + +float ESM(sampler2D _sampler, vec4 _shadowCoord, float _bias, float _depthMultiplier) +{ + vec2 texCoord = _shadowCoord.xy/_shadowCoord.w; + + bool outside = any(greaterThan(texCoord, vec2_splat(1.0))) + || any(lessThan (texCoord, vec2_splat(0.0))) + ; + + if (outside) + { + return 1.0; + } + + float receiver = (_shadowCoord.z-_bias)/_shadowCoord.w; + float occluder = unpackRgbaToFloat(texture2D(_sampler, texCoord) ); + + float visibility = clamp(exp(_depthMultiplier * (occluder-receiver) ), 0.0, 1.0); + + return visibility; +} + + +vec4 blur9(sampler2D _sampler, vec2 _uv0, vec4 _uv1, vec4 _uv2, vec4 _uv3, vec4 _uv4) +{ +#define _BLUR9_WEIGHT_0 1.0 +#define _BLUR9_WEIGHT_1 0.9 +#define _BLUR9_WEIGHT_2 0.55 +#define _BLUR9_WEIGHT_3 0.18 +#define _BLUR9_WEIGHT_4 0.1 +#define _BLUR9_NORMALIZE (_BLUR9_WEIGHT_0+2.0*(_BLUR9_WEIGHT_1+_BLUR9_WEIGHT_2+_BLUR9_WEIGHT_3+_BLUR9_WEIGHT_4) ) +#define BLUR9_WEIGHT(_x) (_BLUR9_WEIGHT_##_x/_BLUR9_NORMALIZE) + + float blur; + blur = unpackRgbaToFloat(texture2D(_sampler, _uv0) * BLUR9_WEIGHT(0)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv1.xy) * BLUR9_WEIGHT(1)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv1.zw) * BLUR9_WEIGHT(1)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv2.xy) * BLUR9_WEIGHT(2)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv2.zw) * BLUR9_WEIGHT(2)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv3.xy) * BLUR9_WEIGHT(3)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv3.zw) * BLUR9_WEIGHT(3)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv4.xy) * BLUR9_WEIGHT(4)); + blur += unpackRgbaToFloat(texture2D(_sampler, _uv4.zw) * BLUR9_WEIGHT(4)); + return packFloatToRgba(blur); +} + +vec4 blur9VSM(sampler2D _sampler, vec2 _uv0, vec4 _uv1, vec4 _uv2, vec4 _uv3, vec4 _uv4) +{ +#define _BLUR9_WEIGHT_0 1.0 +#define _BLUR9_WEIGHT_1 0.9 +#define _BLUR9_WEIGHT_2 0.55 +#define _BLUR9_WEIGHT_3 0.18 +#define _BLUR9_WEIGHT_4 0.1 +#define _BLUR9_NORMALIZE (_BLUR9_WEIGHT_0+2.0*(_BLUR9_WEIGHT_1+_BLUR9_WEIGHT_2+_BLUR9_WEIGHT_3+_BLUR9_WEIGHT_4) ) +#define BLUR9_WEIGHT(_x) (_BLUR9_WEIGHT_##_x/_BLUR9_NORMALIZE) + + vec2 blur; + vec4 val; + val = texture2D(_sampler, _uv0) * BLUR9_WEIGHT(0); + blur = vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv1.xy) * BLUR9_WEIGHT(1); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv1.zw) * BLUR9_WEIGHT(1); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv2.xy) * BLUR9_WEIGHT(2); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv2.zw) * BLUR9_WEIGHT(2); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv3.xy) * BLUR9_WEIGHT(3); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv3.zw) * BLUR9_WEIGHT(3); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv4.xy) * BLUR9_WEIGHT(4); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + val = texture2D(_sampler, _uv4.zw) * BLUR9_WEIGHT(4); + blur += vec2(unpackHalfFloat(val.rg), unpackHalfFloat(val.ba)); + + return vec4(packHalfFloat(blur.x), packHalfFloat(blur.y)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_black.sc b/examples/16-shadowmaps/fs_shadowmaps_color_black.sc new file mode 100644 index 000000000..057b621ba --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_black.sc @@ -0,0 +1,11 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh b/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh new file mode 100644 index 000000000..c6adfa8b0 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning.sh @@ -0,0 +1,84 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" + +uniform vec4 u_params0; +uniform vec4 u_params1; +uniform vec4 u_params2; +uniform vec4 u_color; + +uniform vec3 u_materialKa; +uniform vec3 u_materialKd; +uniform vec4 u_materialKs; +uniform vec4 u_lightPosition; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_smSamplingParams; +uniform vec4 u_csmFarDistances; + +#if SM_OMNI +uniform vec3 u_tetraNormalGreen; +uniform vec3 u_tetraNormalYellow; +uniform vec3 u_tetraNormalBlue; +uniform vec3 u_tetraNormalRed; +#endif + +SAMPLER2D(u_shadowMap0, 4); +SAMPLER2D(u_shadowMap1, 5); +SAMPLER2D(u_shadowMap2, 6); +SAMPLER2D(u_shadowMap3, 7); + +struct Shader +{ + vec3 ambi; + vec3 diff; + vec3 spec; +}; + +Shader evalShader(float _diff, float _spec) +{ + Shader shader; + + shader.ambi = u_lightAmbientPower.xyz * u_lightAmbientPower.w * u_materialKa; + shader.diff = u_lightDiffusePower.xyz * u_lightDiffusePower.w * u_materialKd * _diff; + shader.spec = u_lightSpecularPower.xyz * u_lightSpecularPower.w * u_materialKs.xyz * _spec; + + return shader; +} + +float computeVisibility(sampler2D _sampler + , vec4 _shadowCoord + , float _bias + , vec4 _samplingParams + , vec2 _texelSize + , float _depthMultiplier + , float _minVariance + , float _hardness + ) +{ + float visibility; + +#if SM_LINEAR + vec4 shadowcoord = vec4(_shadowCoord.xy / _shadowCoord.w, _shadowCoord.z, 1.0); +#else + vec4 shadowcoord = _shadowCoord; +#endif + +#if SM_HARD + visibility = hardShadow(_sampler, shadowcoord, _bias); +#elif SM_PCF + visibility = PCF(_sampler, shadowcoord, _bias, _samplingParams, _texelSize); +#elif SM_VSM + visibility = VSM(_sampler, shadowcoord, _bias, _depthMultiplier, _minVariance); +#elif SM_ESM + visibility = ESM(_sampler, shadowcoord, _bias, _depthMultiplier * _hardness); +#endif + + return visibility; +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc new file mode 100644 index 000000000..1b7644cfe --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc new file mode 100644 index 000000000..fa53a9d0e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc new file mode 100644 index 000000000..8f960b20e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc new file mode 100644 index 000000000..5ca772630 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_csm.sc @@ -0,0 +1,18 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc new file mode 100644 index 000000000..f578abd7f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc new file mode 100644 index 000000000..ebeac2cc1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_esm_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_ESM 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc new file mode 100644 index 000000000..f06666db5 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc new file mode 100644 index 000000000..27918465d --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_csm.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc new file mode 100644 index 000000000..b6d7554e9 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc new file mode 100644 index 000000000..05bf3ac50 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc new file mode 100644 index 000000000..90947dbfe --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_linear_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_HARD 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc new file mode 100644 index 000000000..78ad2baee --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_hard_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_HARD 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh new file mode 100644 index 000000000..fb8b90971 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_main.sh @@ -0,0 +1,151 @@ +#define u_ambientPass u_params0.x +#define u_lightningPass u_params0.y + +#define u_shadowMapBias u_params1.x +#define u_shadowMapParam0 u_params1.z +#define u_shadowMapParam1 u_params1.w + +#define u_shadowMapShowCoverage u_params2.y +#define u_shadowMapTexelSize u_params2.z + +#define u_spotDirection u_lightSpotDirectionInner.xyz +#define u_spotInner u_lightSpotDirectionInner.w +#define u_lightAttnParams u_lightAttenuationSpotOuter.xyz +#define u_spotOuter u_lightAttenuationSpotOuter.w + +// Pcf +#define u_shadowMapPcfMode u_shadowMapParam0 +#define u_shadowMapNoiseAmount u_shadowMapParam1 + +// Vsm +#define u_shadowMapMinVariance u_shadowMapParam0 +#define u_shadowMapDepthMultiplier u_shadowMapParam1 + +// Esm +#define u_shadowMapHardness u_shadowMapParam0 +#define u_shadowMapDepthMultiplier u_shadowMapParam1 + +{ + vec3 colorCoverage; + float visibility; + +#if SM_CSM + vec2 texelSize = vec2_splat(u_shadowMapTexelSize); + + vec2 texcoord1 = v_texcoord1.xy/v_texcoord1.w; + vec2 texcoord2 = v_texcoord2.xy/v_texcoord2.w; + vec2 texcoord3 = v_texcoord3.xy/v_texcoord3.w; + vec2 texcoord4 = v_texcoord4.xy/v_texcoord4.w; + + bool selection0 = all(lessThan(texcoord1, vec2_splat(0.99))) && all(greaterThan(texcoord1, vec2_splat(0.01))); + bool selection1 = all(lessThan(texcoord2, vec2_splat(0.99))) && all(greaterThan(texcoord2, vec2_splat(0.01))); + bool selection2 = all(lessThan(texcoord3, vec2_splat(0.99))) && all(greaterThan(texcoord3, vec2_splat(0.01))); + bool selection3 = all(lessThan(texcoord4, vec2_splat(0.99))) && all(greaterThan(texcoord4, vec2_splat(0.01))); + + if (selection0) + { + vec4 shadowcoord = v_texcoord1; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(-coverage, coverage, -coverage); + visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else if (selection1) + { + vec4 shadowcoord = v_texcoord2; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(coverage, coverage, -coverage); + visibility = computeVisibility(u_shadowMap1, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/2.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else if (selection2) + { + vec4 shadowcoord = v_texcoord3; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(-coverage, -coverage, coverage); + visibility = computeVisibility(u_shadowMap2, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/3.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } + else //selection3 + { + vec4 shadowcoord = v_texcoord4; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.4; + colorCoverage = vec3(coverage, -coverage, -coverage); + visibility = computeVisibility(u_shadowMap3, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize/4.0, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); + } +#elif SM_OMNI + vec2 texelSize = vec2_splat(u_shadowMapTexelSize/4.0); + + vec4 faceSelection; + vec3 pos = v_position.xyz; + faceSelection.x = dot(u_tetraNormalGreen, pos); + faceSelection.y = dot(u_tetraNormalYellow, pos); + faceSelection.z = dot(u_tetraNormalBlue, pos); + faceSelection.w = dot(u_tetraNormalRed, pos); + + vec4 shadowcoord; + float faceMax = max(max(faceSelection.x, faceSelection.y), max(faceSelection.z, faceSelection.w)); + if (faceSelection.x == faceMax) + { + shadowcoord = v_texcoord1; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(-coverage, coverage, -coverage); + } + else if (faceSelection.y == faceMax) + { + shadowcoord = v_texcoord2; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, coverage, -coverage); + } + else if (faceSelection.z == faceMax) + { + shadowcoord = v_texcoord3; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(-coverage, -coverage, coverage); + } + else // (faceSelection.w == faceMax) + { + shadowcoord = v_texcoord4; + + float coverage = texcoordInRange(shadowcoord.xy/shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, -coverage, -coverage); + } + + visibility = computeVisibility(u_shadowMap0, shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); +#else + vec2 texelSize = vec2_splat(u_shadowMapTexelSize); + + float coverage = texcoordInRange(v_shadowcoord.xy/v_shadowcoord.w) * 0.3; + colorCoverage = vec3(coverage, -coverage, -coverage); + + visibility = computeVisibility(u_shadowMap0, v_shadowcoord, u_shadowMapBias, u_smSamplingParams, texelSize, u_shadowMapDepthMultiplier, u_shadowMapMinVariance, u_shadowMapHardness); +#endif + + vec3 v = v_view; + vec3 vd = -normalize(v_view); + vec3 n = v_normal; + Light light = evalLight(v, u_lightPosition, u_spotDirection, u_spotInner, u_spotOuter, u_lightAttnParams); + + vec2 lc = lit(light.ld, n, vd, u_materialKs.w) * light.attn; + Shader shader = evalShader(lc.x, lc.y); + + //Fog. + const vec3 fogColor = vec3_splat(0.0); + const float fogDensity = 0.0035; + const float LOG2 = 1.442695; + float z = length(v); + float fogFactor = clamp(1.0/exp2(fogDensity*fogDensity*z*z*LOG2), 0.0, 1.0); + + vec3 color = u_color.xyz; + + vec3 ambient = shader.ambi * color; + vec3 brdf = (shader.diff + shader.spec) * color * visibility; + + vec3 final = toGamma(abs(ambient + brdf)) + (colorCoverage * u_shadowMapShowCoverage); + gl_FragColor.xyz = mix(fogColor, final, fogFactor); + gl_FragColor.w = 1.0; +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc new file mode 100644 index 000000000..89a7c5011 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc new file mode 100644 index 000000000..f356d0c88 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc new file mode 100644 index 000000000..7b593b75e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc new file mode 100644 index 000000000..182562fc4 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_PCF 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc new file mode 100644 index 000000000..e601ae88f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_PCF 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc new file mode 100644 index 000000000..f6da783ac --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_pcf_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_PCF 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc new file mode 100644 index 000000000..c3e675df7 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm.sc @@ -0,0 +1,15 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc new file mode 100644 index 000000000..7b5e33ff1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_csm.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc new file mode 100644 index 000000000..6078739ff --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear.sc @@ -0,0 +1,16 @@ +$input v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_LINEAR 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc new file mode 100644 index 000000000..9b46fea28 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_csm.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_VSM 1 +#define SM_LINEAR 1 +#define SM_CSM 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc new file mode 100644 index 000000000..70027ef14 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_linear_omni.sc @@ -0,0 +1,17 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ +#define SM_VSM 1 +#define SM_LINEAR 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc new file mode 100644 index 000000000..ecf3533ea --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_lightning_vsm_omni.sc @@ -0,0 +1,16 @@ +$input v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#define SM_VSM 1 +#define SM_OMNI 1 + +#include "fs_shadowmaps_color_lightning.sh" + +void main() +{ +#include "fs_shadowmaps_color_lightning_main.sh" +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc b/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc new file mode 100644 index 000000000..5a109e08e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_color_texture.sc @@ -0,0 +1,22 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +uniform vec4 u_color; +SAMPLER2D(u_texColor, 0); + +void main() +{ + vec4 tcolor = toLinear(texture2D(u_texColor, v_texcoord0)); + + if (tcolor.x < 0.1) //OK for now. + { + discard; + } + + gl_FragColor = toGamma(tcolor + u_color); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_hblur.sc b/examples/16-shadowmaps/fs_shadowmaps_hblur.sc new file mode 100644 index 000000000..401f3f77c --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_hblur.sc @@ -0,0 +1,14 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc new file mode 100644 index 000000000..bccdfe087 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_hblur_vsm.sc @@ -0,0 +1,15 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} + diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc new file mode 100644 index 000000000..867e92c40 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth.sc @@ -0,0 +1,14 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + gl_FragColor = packFloatToRgba(depth); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc new file mode 100644 index 000000000..cc18624c2 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_linear.sc @@ -0,0 +1,13 @@ +$input v_depth + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + gl_FragColor = packFloatToRgba(v_depth); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc new file mode 100644 index 000000000..b683249b1 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm.sc @@ -0,0 +1,20 @@ +$input v_position + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_position.z/v_position.w * 0.5 + 0.5; + float depthSq = depth*depth; + + //TODO: try this. + //vec2 dxy = vec2(dFdx(depth), dFdy(depth)); + //depthSq += 0.25*dot(dxy, dxy); + + gl_FragColor = vec4(packHalfFloat(depth), packHalfFloat(depthSq)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc new file mode 100644 index 000000000..d1cd1537a --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_packdepth_vsm_linear.sc @@ -0,0 +1,20 @@ +$input v_depth + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +void main() +{ + float depth = v_depth; + float depthSq = depth*depth; + + //TODO: try this. + //vec2 dxy = vec2(dFdx(depth), dFdy(depth)); + //depthSq += 0.25*dot(dxy, dxy); + + gl_FragColor = vec4(packHalfFloat(depth), packHalfFloat(depthSq)); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_texture.sc b/examples/16-shadowmaps/fs_shadowmaps_texture.sc new file mode 100644 index 000000000..78156e1ca --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_texture.sc @@ -0,0 +1,14 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_texColor, 0); + +void main() +{ + gl_FragColor = texture2D(u_texColor, v_texcoord0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc new file mode 100644 index 000000000..1cd1ab49f --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth.sc @@ -0,0 +1,19 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_shadowMap0, 4); + +uniform vec4 u_params2; +#define u_depthValuePow u_params2.x + +void main() +{ + float depth = unpackRgbaToFloat(texture2D(u_shadowMap0, v_texcoord0) ); + vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) ); + gl_FragColor = vec4(rgba, 1.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc new file mode 100644 index 000000000..ee8f0269e --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_unpackdepth_vsm.sc @@ -0,0 +1,20 @@ +$input v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" +SAMPLER2D(u_shadowMap0, 4); + +uniform vec4 u_params2; +#define u_depthValuePow u_params2.x + +void main() +{ + vec4 val = texture2D(u_shadowMap0, v_texcoord0); + float depth = unpackHalfFloat(val.rg); + vec3 rgba = pow(vec3_splat(depth), vec3_splat(u_depthValuePow) ); + gl_FragColor = vec4(rgba, 1.0); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_vblur.sc b/examples/16-shadowmaps/fs_shadowmaps_vblur.sc new file mode 100644 index 000000000..401f3f77c --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_vblur.sc @@ -0,0 +1,14 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} diff --git a/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc b/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc new file mode 100644 index 000000000..bccdfe087 --- /dev/null +++ b/examples/16-shadowmaps/fs_shadowmaps_vblur_vsm.sc @@ -0,0 +1,15 @@ +$input v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "common.sh" +SAMPLER2D(u_shadowMap0, 4); + +void main() +{ + gl_FragColor = blur9VSM(u_shadowMap0, v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4); +} + diff --git a/examples/16-shadowmaps/hollowcube.obj b/examples/16-shadowmaps/hollowcube.obj new file mode 100644 index 000000000..2980086ba --- /dev/null +++ b/examples/16-shadowmaps/hollowcube.obj @@ -0,0 +1,934 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g holeycube +v 1.500000 1.211657 0.000000 +v 1.500000 1.211656 1.209338 +v 1.236416 1.211656 1.209338 +v 1.236416 1.211657 0.000000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v 1.500000 -0.000000 1.209337 +v 1.500000 -1.211657 1.209337 +v 1.236416 -1.211657 1.209337 +v 1.236416 -0.000000 1.209337 +v 1.236416 -0.000000 1.500000 +v 1.236416 -1.211657 1.500000 +v 1.500000 -1.211657 1.500000 +v 1.500000 -0.000000 1.500000 +v 1.500000 0.000000 -1.500000 +v 1.500000 -1.211656 -1.500000 +v 1.236416 -1.211656 -1.500000 +v 1.236416 0.000000 -1.500000 +v -1.236416 0.000000 -1.500000 +v -1.236416 -1.211656 -1.500000 +v -1.500000 -1.211656 -1.500000 +v -1.500000 0.000000 -1.500000 +v -1.500000 -0.000000 1.500000 +v -1.500000 -1.211657 1.500000 +v -1.236416 -1.211657 1.500000 +v -1.236416 -0.000000 1.500000 +v -1.236416 -0.000000 1.209337 +v -1.236416 -1.211657 1.209337 +v -1.500000 -1.211657 1.209337 +v -1.500000 -0.000000 1.209337 +v -1.500000 1.211656 1.500000 +v -1.500000 1.211656 1.209338 +v -1.236416 1.211656 1.209338 +v -1.236416 1.211656 1.500000 +v -1.500000 1.211657 -1.500000 +v -1.236416 1.211657 -1.500000 +v 1.236416 1.211657 -1.500000 +v 1.500000 1.211657 -1.500000 +v 1.500000 1.211656 1.500000 +v 1.236416 1.211656 1.500000 +v 0.000000 -1.500000 1.209337 +v -1.236416 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 1.211656 1.209338 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 0.000000 1.211656 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v 0.000000 -1.500000 -1.500000 +v -1.236416 -1.500000 -1.500000 +v 0.000000 -1.211656 -1.500000 +v 0.000000 -1.500000 -1.209338 +v -1.236416 -1.500000 -1.209338 +v 1.236416 -1.211657 -0.000000 +v 1.236416 -1.211656 -1.209338 +v 1.236416 -1.500000 -1.209338 +v 1.236416 -1.500000 -0.000000 +v 1.500000 -1.500000 -0.000000 +v 1.500000 -1.500000 -1.209338 +v 1.500000 -1.211656 -1.209338 +v 1.500000 -1.211657 -0.000000 +v 1.500000 -1.500000 1.209337 +v 1.236416 -1.500000 1.209337 +v -1.236416 -1.500000 -0.000000 +v -1.500000 -1.500000 1.209337 +v -1.500000 -1.500000 -0.000000 +v -1.500000 -1.500000 -1.209338 +v -1.236416 -1.211657 -0.000000 +v -1.236416 -1.211656 -1.209338 +v -1.500000 -1.211656 -1.209338 +v -1.500000 -1.211657 -0.000000 +v -1.500000 1.211657 0.000000 +v -1.500000 1.211657 -1.209337 +v -1.236416 1.211657 -1.209337 +v -1.236416 1.211657 0.000000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 1.236416 1.211657 -1.209337 +v 1.500000 1.211657 -1.209337 +v 1.236416 0.000000 -1.209337 +v 1.500000 0.000000 -1.209337 +v -1.500000 0.000000 -1.209337 +v -1.236416 0.000000 -1.209337 +v 0.000000 -1.211656 -1.209338 +v 0.000000 1.211657 -1.209337 +v 0.000000 1.211657 -1.500000 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v -1.500000 -1.500000 1.500000 +v -1.236416 -1.500000 1.500000 +v 0.000000 -1.211657 1.500000 +v -1.500000 -1.500000 -1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.500000 1.500000 +v 1.500000 -1.500000 1.500000 +v 1.236416 -1.500000 -1.500000 +v 1.500000 -1.500000 -1.500000 +v 1.500000 1.500000 0.000000 +v 1.500000 1.500000 1.209338 +v 1.236416 1.500000 1.209338 +v 1.236416 1.500000 0.000000 +v -1.236416 1.500000 1.209338 +v 0.000000 1.500000 1.209338 +v -1.236416 1.500000 1.500000 +v 0.000000 1.500000 1.500000 +v 1.236416 1.500000 1.500000 +v -1.500000 1.500000 1.500000 +v 1.500000 1.500000 1.500000 +v -1.236416 1.500000 0.000000 +v -1.236416 1.500000 -1.209337 +v -1.500000 1.500000 -1.209337 +v -1.500000 1.500000 0.000000 +v -1.500000 1.500000 1.209338 +v 1.500000 1.500000 -1.209337 +v 1.236416 1.500000 -1.209337 +v 0.000000 1.500000 -1.209337 +v 0.000000 1.500000 -1.500000 +v -1.236416 1.500000 -1.500000 +v 1.236416 1.500000 -1.500000 +v -1.500000 1.500000 -1.500000 +v 1.500000 1.500000 -1.500000 +v 0.000000 -1.500000 1.209337 +v 0.000000 -1.211657 1.209337 +v 0.000000 -1.211657 1.500000 +v 0.000000 -1.500000 1.500000 +v 1.236416 -1.211657 1.209337 +v -1.236416 -1.211657 1.209337 +v 0.000000 -1.211657 1.209337 +vn 0.000000 -1.000000 -0.000001 +vn 1.000000 0.000000 0.000000 +vn -1.000000 -0.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -0.000000 1.000000 +vn 0.000000 0.000001 -1.000000 +vn 0.000000 0.000000 0.000000 +vn 0.000000 -1.000000 -0.000000 +vn 0.000000 1.000000 0.000001 +vn 0.000000 -0.000001 1.000000 +vn 0.000000 1.000000 0.000000 +s off +f 1//1 2//1 3//1 4//1 +f 2//2 1//2 5//2 6//2 +f 4//3 3//3 7//3 8//3 +f 9//4 10//4 11//4 12//4 +f 13//5 14//5 15//5 16//5 +f 17//4 18//4 19//4 20//4 +f 21//4 22//4 23//4 24//4 +f 25//5 26//5 27//5 28//5 +f 29//4 30//4 31//4 32//4 +f 32//3 31//3 26//3 25//3 +f 25//3 33//3 34//3 32//3 +f 32//6 34//6 35//6 29//6 +f 28//5 36//5 33//5 25//5 +f 24//4 37//4 38//4 21//4 +f 20//4 39//4 40//4 17//4 +f 16//5 41//5 42//5 13//5 +f 12//6 3//6 2//6 9//6 +f 9//2 2//2 41//2 16//2 +f 13//3 42//3 3//3 12//3 +f 43//4 44//4 30//4 45//4 +f 46//4 35//4 47//4 48//4 +f 99//7 100//7 133//7 132//7 +f 50//5 49//5 36//5 51//5 +f 51//5 42//5 52//5 50//5 +f 100//7 102//7 135//7 133//7 +f 48//4 7//4 3//4 46//4 +f 46//8 3//8 42//8 51//8 +f 49//5 53//5 33//5 36//5 +f 42//5 41//5 54//5 52//5 +f 86//7 53//7 122//7 128//7 +f 41//2 2//2 6//2 54//2 +f 55//4 56//4 22//4 57//4 +f 58//8 59//8 56//8 55//8 +f 60//3 61//3 62//3 63//3 +f 64//2 65//2 66//2 67//2 +f 67//9 66//9 61//9 60//9 +f 63//8 62//8 65//8 64//8 +f 64//8 68//8 69//8 63//8 +f 70//8 44//8 71//8 72//8 +f 72//8 73//8 59//8 70//8 +f 74//9 75//9 76//9 77//9 +f 78//8 79//8 80//8 81//8 +f 5//7 87//7 129//7 113//7 +f 54//7 6//7 114//7 123//7 +f 48//7 47//7 117//7 118//7 +f 87//7 103//7 136//7 129//7 +f 90//8 1//8 4//8 89//8 +f 1//2 90//2 87//2 5//2 +f 8//3 88//3 89//3 4//3 +f 20//3 19//3 61//3 91//3 +f 92//2 66//2 18//2 17//2 +f 91//10 61//10 66//10 92//10 +f 93//10 76//10 75//10 94//10 +f 24//3 23//3 76//3 93//3 +f 94//2 75//2 22//2 21//2 +f 21//2 38//2 80//2 94//2 +f 57//11 22//11 75//11 95//11 +f 96//8 80//8 38//8 97//8 +f 93//3 79//3 37//3 24//3 +f 94//5 80//5 79//5 93//5 +f 92//5 90//5 89//5 91//5 +f 17//2 40//2 90//2 92//2 +f 91//3 89//3 39//3 20//3 +f 95//5 75//5 59//5 58//5 +f 98//5 83//5 80//5 96//5 +f 103//7 101//7 134//7 136//7 +f 97//4 38//4 100//4 99//4 +f 99//4 101//4 39//4 97//4 +f 6//7 5//7 113//7 114//7 +f 96//5 89//5 88//5 98//5 +f 97//8 39//8 89//8 96//8 +f 38//4 37//4 102//4 100//4 +f 101//4 103//4 40//4 39//4 +f 7//7 48//7 118//7 115//7 +f 103//2 87//2 90//2 40//2 +f 26//3 31//3 71//3 104//3 +f 71//8 44//8 105//8 104//8 +f 28//2 27//2 30//2 29//2 +f 29//2 35//2 36//2 28//2 +f 74//2 30//2 44//2 70//2 +f 72//3 71//3 31//3 77//3 +f 77//11 31//11 30//11 74//11 +f 81//1 35//1 34//1 78//1 +f 78//3 34//3 86//3 85//3 +f 82//2 47//2 35//2 81//2 +f 45//11 30//11 27//11 106//11 +f 51//8 36//8 35//8 46//8 +f 102//7 84//7 126//7 135//7 +f 53//3 86//3 34//3 33//3 +f 107//3 73//3 76//3 23//3 +f 107//8 56//8 59//8 73//8 +f 70//2 59//2 75//2 74//2 +f 77//3 76//3 73//3 72//3 +f 85//3 84//3 79//3 78//3 +f 81//2 80//2 83//2 82//2 +f 88//7 8//7 116//7 130//7 +f 37//3 79//3 84//3 102//3 +f 60//11 11//11 10//11 67//11 +f 67//2 10//2 68//2 64//2 +f 63//3 69//3 11//3 60//3 +f 16//2 15//2 10//2 9//2 +f 12//3 11//3 14//3 13//3 +f 108//8 105//8 44//8 43//8 +f 106//5 27//5 105//5 108//5 +f 108//5 109//5 14//5 106//5 +f 43//8 69//8 109//8 108//8 +f 45//4 11//4 69//4 43//4 +f 106//11 14//11 11//11 45//11 +f 27//5 26//5 104//5 105//5 +f 109//5 110//5 15//5 14//5 +f 110//8 109//8 69//8 68//8 +f 110//2 68//2 10//2 15//2 +f 57//4 19//4 111//4 55//4 +f 55//8 111//8 62//8 58//8 +f 58//5 62//5 61//5 95//5 +f 95//11 61//11 19//11 57//11 +f 56//4 107//4 23//4 22//4 +f 19//4 18//4 112//4 111//4 +f 65//8 62//8 111//8 112//8 +f 18//2 66//2 65//2 112//2 +f 118//11 117//11 119//11 120//11 +f 120//11 121//11 115//11 118//11 +f 114//11 115//11 121//11 123//11 +f 124//11 125//11 126//11 127//11 +f 127//11 128//11 117//11 124//11 +f 116//11 115//11 114//11 113//11 +f 113//11 129//11 130//11 116//11 +f 132//11 133//11 125//11 131//11 +f 131//11 130//11 134//11 132//11 +f 136//11 134//11 130//11 129//11 +f 122//11 119//11 117//11 128//11 +f 126//11 125//11 133//11 135//11 +f 82//7 83//7 125//7 124//7 +f 49//7 50//7 120//7 119//7 +f 84//7 85//7 127//7 126//7 +f 50//7 52//7 121//7 120//7 +f 52//7 54//7 123//7 121//7 +f 53//7 49//7 119//7 122//7 +f 8//7 7//7 115//7 116//7 +f 85//7 86//7 128//7 127//7 +f 83//7 98//7 131//7 125//7 +f 47//7 82//7 124//7 117//7 +f 101//7 99//7 132//7 134//7 +f 98//7 88//7 130//7 131//7 +f 108//7 106//7 139//7 140//7 +f 45//7 43//7 137//7 138//7 +f 106//7 45//7 138//7 139//7 +f 43//7 108//7 140//7 137//7 +f 30//7 45//7 143//7 142//7 +f 45//7 11//7 141//7 143//7 +g holeycube.001 +v 0.037848 0.053616 0.680965 +v 0.414385 -0.152030 0.676229 +v 0.382376 -0.209100 0.609416 +v 0.005839 -0.003453 0.614153 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.558694 0.119124 0.375479 +v 0.703003 0.390278 0.074730 +v 0.670994 0.333208 0.007917 +v 0.526685 0.062054 0.308667 +v 0.617185 0.012627 0.307529 +v 0.761494 0.283781 0.006779 +v 0.793503 0.340851 0.073591 +v 0.649194 0.069697 0.374341 +v -0.284880 0.579845 0.386090 +v -0.140571 0.850998 0.085340 +v -0.172580 0.793929 0.018528 +v -0.316889 0.522775 0.319277 +v -0.617185 -0.012627 -0.307529 +v -0.472876 0.258527 -0.608278 +v -0.504885 0.201457 -0.675091 +v -0.649194 -0.069697 -0.374341 +v 0.284880 -0.579845 -0.386090 +v 0.429189 -0.308690 -0.686840 +v 0.461198 -0.251621 -0.620027 +v 0.316889 -0.522775 -0.319277 +v 0.226389 -0.473348 -0.318139 +v 0.370698 -0.202194 -0.618889 +v 0.338689 -0.259263 -0.685701 +v 0.194380 -0.530418 -0.384952 +v 0.140571 -0.850998 -0.085340 +v 0.050071 -0.801571 -0.084202 +v 0.082080 -0.744502 -0.017389 +v 0.172580 -0.793929 -0.018528 +v -0.793503 -0.340851 -0.073591 +v -0.761494 -0.283781 -0.006779 +v -0.461198 0.251621 0.620027 +v -0.429189 0.308690 0.686840 +v 0.504885 -0.201457 0.675091 +v 0.472876 -0.258527 0.608278 +v 0.555187 0.130035 -0.377057 +v 0.405040 -0.137666 -0.690460 +v 0.520846 0.065507 -0.305486 +v 0.232228 -0.476801 0.296014 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.322728 -0.526228 0.294875 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.288386 0.590756 -0.366446 +v -0.438534 0.323055 -0.679849 +v -0.322728 0.526228 -0.294875 +v -0.197886 0.541329 -0.367584 +v -0.348034 0.273628 -0.680987 +v 0.294457 0.538855 0.012653 +v -0.082080 0.744502 0.017389 +v -0.047738 0.809030 -0.054181 +v 0.328799 0.603383 -0.058918 +v 0.360808 0.660452 0.007895 +v -0.015729 0.866099 0.012631 +v -0.050071 0.801571 0.084202 +v 0.326466 0.595925 0.079466 +v 0.737345 0.454805 0.003159 +v 0.705335 0.397736 -0.063654 +v 0.028503 0.067981 -0.685724 +v 0.373030 -0.194736 -0.757272 +v -0.003506 0.010911 -0.752536 +v -0.380043 0.216558 -0.747800 +v -0.005839 0.003453 -0.614153 +v -0.382376 0.209100 -0.609416 +v -0.414385 0.152030 -0.676229 +v -0.037848 -0.053616 -0.680965 +v -0.326466 -0.595925 -0.079466 +v -0.703003 -0.390278 -0.074730 +v -0.670994 -0.333208 -0.007917 +v -0.294457 -0.538855 -0.012653 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.370698 0.202194 0.618889 +v -0.338689 0.259263 0.685701 +v -0.226389 0.473348 0.318139 +v -0.194380 0.530418 0.384952 +v -0.558694 -0.119124 -0.375479 +v -0.526685 -0.062054 -0.308667 +v -0.232228 0.476801 -0.296014 +v -0.520846 -0.065507 0.305486 +v -0.611346 -0.016080 0.306624 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.463531 -0.244163 -0.758410 +v 0.495540 -0.187093 -0.691598 +v 0.611346 0.016080 -0.306624 +v -0.470543 0.265985 -0.746662 +v 0.645688 0.080608 -0.378195 +v 0.795836 0.348309 -0.064792 +v 0.827845 0.405378 0.002021 +v -0.138238 0.858457 -0.053043 +v -0.106229 0.915526 0.013769 +v 0.003506 -0.010911 0.752536 +v 0.380043 -0.216558 0.747800 +v 0.348034 -0.273628 0.680987 +v -0.028503 -0.067981 0.685724 +v 0.047738 -0.809030 0.054181 +v 0.197886 -0.541329 0.367584 +v 0.138238 -0.858457 0.053043 +v 0.288386 -0.590756 0.366446 +v 0.438534 -0.323055 0.679849 +v 0.106229 -0.915526 -0.013769 +v 0.470543 -0.265985 0.746662 +v -0.328799 -0.603383 0.058918 +v -0.705335 -0.397736 0.063654 +v -0.737345 -0.454805 -0.003159 +v -0.360808 -0.660452 -0.007895 +v 0.015729 -0.866099 -0.012631 +v -0.373030 0.194736 0.757272 +v -0.405040 0.137666 0.690460 +v -0.555187 -0.130035 0.377057 +v -0.645688 -0.080608 0.378195 +v -0.795836 -0.348309 0.064792 +v -0.495540 0.187093 0.691598 +v -0.827845 -0.405378 -0.002021 +v -0.463531 0.244163 0.758410 +v 0.555187 0.130035 -0.377057 +v 0.520846 0.065507 -0.305486 +v 0.611346 0.016080 -0.306624 +v 0.645688 0.080608 -0.378195 +v 0.670994 0.333208 0.007917 +v 0.370698 -0.202194 -0.618889 +v 0.520846 0.065507 -0.305486 +vn 0.335692 0.630762 -0.699607 +vn 0.342281 0.610259 0.714442 +vn -0.342282 -0.610259 -0.714442 +vn -0.877584 0.479296 0.011038 +vn 0.877584 -0.479296 -0.011038 +vn -0.877584 0.479295 0.011038 +vn -0.342281 -0.610259 -0.714442 +vn -0.877584 0.479295 0.011039 +vn 0.877584 -0.479295 -0.011038 +vn 0.335693 0.630761 -0.699607 +vn -0.335692 -0.630762 0.699607 +vn 0.342282 0.610259 0.714442 +vn 0.877584 -0.479295 -0.011039 +vn -0.335693 -0.630761 0.699607 +vn -0.877584 0.479296 0.011039 +vn 0.335693 0.630761 -0.699608 +vn 0.877584 -0.479296 -0.011039 +vn -0.335693 -0.630761 0.699608 +s off +f 144//12 145//12 146//12 147//12 +f 145//13 144//13 148//13 149//13 +f 147//14 146//14 150//14 151//14 +f 152//15 153//15 154//15 155//15 +f 156//16 157//16 158//16 159//16 +f 160//15 161//15 162//15 163//15 +f 164//17 165//17 166//17 167//17 +f 168//16 169//16 170//16 171//16 +f 172//15 173//15 174//15 175//15 +f 175//18 174//18 169//18 168//18 +f 168//14 176//14 177//14 175//14 +f 175//19 177//19 178//19 172//19 +f 171//16 179//16 176//16 168//16 +f 167//15 180//15 181//15 164//15 +f 163//15 182//15 183//15 160//15 +f 159//20 184//20 185//20 156//20 +f 155//19 146//19 145//19 152//19 +f 152//13 145//13 184//13 159//13 +f 156//18 185//18 146//18 155//18 +f 186//15 187//15 173//15 188//15 +f 189//15 178//15 190//15 191//15 +f 242//7 243//7 276//7 275//7 +f 193//16 192//16 179//16 194//16 +f 194//16 185//16 195//16 193//16 +f 243//7 245//7 278//7 276//7 +f 191//15 150//15 146//15 189//15 +f 189//21 146//21 185//21 194//21 +f 192//16 196//16 176//16 179//16 +f 185//16 184//16 197//16 195//16 +f 229//7 196//7 265//7 271//7 +f 184//13 145//13 149//13 197//13 +f 198//15 199//15 165//15 200//15 +f 201//21 202//21 199//21 198//21 +f 203//18 204//18 205//18 206//18 +f 207//13 208//13 209//13 210//13 +f 210//22 209//22 204//22 203//22 +f 206//21 205//21 208//21 207//21 +f 207//21 211//21 212//21 206//21 +f 213//21 187//21 214//21 215//21 +f 215//21 216//21 202//21 213//21 +f 217//22 218//22 219//22 220//22 +f 221//21 222//21 223//21 224//21 +f 148//7 230//7 272//7 256//7 +f 197//7 149//7 257//7 266//7 +f 191//7 190//7 260//7 261//7 +f 230//7 246//7 279//7 272//7 +f 233//21 144//21 147//21 232//21 +f 144//13 233//13 230//13 148//13 +f 151//14 231//14 232//14 147//14 +f 163//18 162//18 204//18 234//18 +f 235//23 209//23 161//23 160//23 +f 234//24 204//24 209//24 235//24 +f 236//24 219//24 218//24 237//24 +f 167//18 166//18 219//18 236//18 +f 237//13 218//13 165//13 164//13 +f 164//13 181//13 223//13 237//13 +f 200//25 165//25 218//25 238//25 +f 239//21 223//21 181//21 240//21 +f 236//14 222//14 180//14 167//14 +f 237//16 223//16 222//16 236//16 +f 235//16 233//16 232//16 234//16 +f 160//13 183//13 233//13 235//13 +f 234//18 232//18 182//18 163//18 +f 238//16 218//16 202//16 201//16 +f 241//16 226//16 223//16 239//16 +f 246//7 244//7 277//7 279//7 +f 240//15 181//15 243//15 242//15 +f 242//15 244//15 182//15 240//15 +f 149//7 148//7 256//7 257//7 +f 239//16 232//16 231//16 241//16 +f 240//21 182//21 232//21 239//21 +f 181//26 180//26 245//26 243//26 +f 244//15 246//15 183//15 182//15 +f 150//7 191//7 261//7 258//7 +f 246//13 230//13 233//13 183//13 +f 169//18 174//18 214//18 247//18 +f 214//21 187//21 248//21 247//21 +f 171//13 170//13 173//13 172//13 +f 172//13 178//13 179//13 171//13 +f 217//23 173//23 187//23 213//23 +f 215//18 214//18 174//18 220//18 +f 220//25 174//25 173//25 217//25 +f 224//12 178//12 177//12 221//12 +f 221//18 177//18 229//18 228//18 +f 225//13 190//13 178//13 224//13 +f 188//25 173//25 170//25 249//25 +f 194//21 179//21 178//21 189//21 +f 245//7 227//7 269//7 278//7 +f 196//14 229//14 177//14 176//14 +f 250//18 216//18 219//18 166//18 +f 250//27 199//27 202//27 216//27 +f 213//23 202//23 218//23 217//23 +f 220//18 219//18 216//18 215//18 +f 228//18 227//18 222//18 221//18 +f 224//13 223//13 226//13 225//13 +f 231//7 151//7 259//7 273//7 +f 180//14 222//14 227//14 245//14 +f 203//25 154//25 153//25 210//25 +f 210//13 153//13 211//13 207//13 +f 206//18 212//18 154//18 203//18 +f 159//23 158//23 153//23 152//23 +f 155//18 154//18 157//18 156//18 +f 251//21 248//21 187//21 186//21 +f 249//16 170//16 248//16 251//16 +f 251//16 252//16 157//16 249//16 +f 186//21 212//21 252//21 251//21 +f 188//15 154//15 212//15 186//15 +f 249//25 157//25 154//25 188//25 +f 170//16 169//16 247//16 248//16 +f 252//28 253//28 158//28 157//28 +f 253//21 252//21 212//21 211//21 +f 253//23 211//23 153//23 158//23 +f 200//15 162//15 254//15 198//15 +f 198//21 254//21 205//21 201//21 +f 201//16 205//16 204//16 238//16 +f 238//25 204//25 162//25 200//25 +f 199//15 250//15 166//15 165//15 +f 162//15 161//15 255//15 254//15 +f 208//21 205//21 254//21 255//21 +f 161//23 209//23 208//23 255//23 +f 261//25 260//25 262//25 263//25 +f 263//25 264//25 258//25 261//25 +f 257//29 258//29 264//29 266//29 +f 267//25 268//25 269//25 270//25 +f 270//25 271//25 260//25 267//25 +f 259//25 258//25 257//25 256//25 +f 256//25 272//25 273//25 259//25 +f 275//25 276//25 268//25 274//25 +f 274//25 273//25 277//25 275//25 +f 279//25 277//25 273//25 272//25 +f 265//25 262//25 260//25 271//25 +f 269//25 268//25 276//25 278//25 +f 225//7 226//7 268//7 267//7 +f 192//7 193//7 263//7 262//7 +f 227//7 228//7 270//7 269//7 +f 193//7 195//7 264//7 263//7 +f 195//7 197//7 266//7 264//7 +f 196//7 192//7 262//7 265//7 +f 151//7 150//7 258//7 259//7 +f 228//7 229//7 271//7 270//7 +f 226//7 241//7 274//7 268//7 +f 190//7 225//7 267//7 260//7 +f 244//7 242//7 275//7 277//7 +f 241//7 231//7 273//7 274//7 +f 251//7 249//7 282//7 283//7 +f 188//7 186//7 280//7 281//7 +f 249//7 188//7 281//7 282//7 +f 186//7 251//7 283//7 280//7 +f 173//7 188//7 286//7 285//7 +f 188//7 154//7 284//7 286//7 +g holeycube.002 +v 0.369385 2.003562 1.792544 +v 0.963329 0.880686 2.925211 +v 0.707927 0.635014 2.815589 +v 0.113983 1.757890 1.682922 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v 2.047380 0.275193 1.756502 +v 3.131433 -0.330301 0.587792 +v 2.876031 -0.575973 0.478171 +v 1.791978 0.029521 1.646880 +v 1.934732 -0.240361 1.919116 +v 3.018785 -0.845855 0.750406 +v 3.274187 -0.600183 0.860028 +v 2.190134 0.005311 2.028738 +v 0.716742 2.790825 -0.781068 +v 1.800794 2.185331 -1.949777 +v 1.545392 1.939659 -2.059399 +v 0.461340 2.545153 -0.890690 +v -1.934732 0.240361 -1.919116 +v -0.850680 -0.365133 -3.087824 +v -1.106082 -0.610805 -3.197446 +v -2.190134 -0.005311 -2.028738 +v -0.716742 -2.790825 0.781068 +v 0.367311 -3.396319 -0.387641 +v 0.622713 -3.150647 -0.278019 +v -0.461340 -2.545153 0.890690 +v -0.604093 -2.275271 0.618455 +v 0.479959 -2.880765 -0.550255 +v 0.224557 -3.126437 -0.659877 +v -0.859495 -2.520943 0.508833 +v -1.800794 -2.185331 1.949777 +v -1.943547 -1.915450 1.677542 +v -1.688145 -1.669778 1.787164 +v -1.545392 -1.939659 2.059399 +v -3.274187 0.600183 -0.860028 +v -3.018785 0.845855 -0.750406 +v -0.622713 3.150647 0.278019 +v -0.367311 3.396319 0.387641 +v 1.106082 0.610805 3.197446 +v 0.850680 0.365133 3.087824 +v 1.935972 -1.872461 -0.314165 +v 0.737936 -3.024857 -0.828377 +v 1.677995 -1.728369 -0.036042 +v -0.490109 -0.517382 2.301377 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v -0.347356 -0.787263 2.573611 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v 0.605333 0.643171 -2.851735 +v -0.592703 -0.509225 -3.365948 +v 0.347356 0.787263 -2.573611 +v 0.748086 0.373290 -2.579500 +v -0.449950 -0.779106 -3.093713 +v 2.282089 0.546902 -0.654497 +v 1.688145 1.669778 -1.787164 +v 1.946122 1.525685 -2.065288 +v 2.540065 0.402810 -0.932619 +v 2.795467 0.648482 -0.822998 +v 2.201524 1.771358 -1.955666 +v 1.943547 1.915450 -1.677542 +v 2.537491 0.792574 -0.544875 +v 3.389409 -0.474393 0.309670 +v 3.134007 -0.720065 0.200048 +v 0.143993 -1.901982 -1.961045 +v 0.482534 -3.270529 -0.937999 +v -0.111409 -2.147654 -2.070667 +v -0.705351 -1.024778 -3.203335 +v -0.113983 -1.757890 -1.682922 +v -0.707927 -0.635014 -2.815589 +v -0.963329 -0.880686 -2.925211 +v -0.369385 -2.003562 -1.792544 +v -2.537491 -0.792574 0.544875 +v -3.131433 0.330301 -0.587792 +v -2.876031 0.575973 -0.478171 +v -2.282089 -0.546902 0.654497 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -0.479959 2.880765 0.550255 +v -0.224557 3.126437 0.659877 +v 0.604093 2.275271 -0.618455 +v 0.859495 2.520943 -0.508833 +v -2.047380 -0.275193 -1.756502 +v -1.791978 -0.029521 -1.646880 +v 0.490109 0.517382 -2.301377 +v -1.677995 1.728369 0.036042 +v -1.820749 1.998251 -0.236193 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 0.625287 -3.540411 -0.665764 +v 0.880689 -3.294739 -0.556142 +v 1.820749 -1.998251 0.236193 +v -0.848105 -0.754897 -3.475569 +v 2.078725 -2.142343 -0.041929 +v 3.276761 -0.989947 0.472284 +v 3.532163 -0.744275 0.581905 +v 1.803369 1.795566 -2.337522 +v 2.058771 2.041239 -2.227901 +v 0.111409 2.147654 2.070667 +v 0.705351 1.024778 3.203335 +v 0.449950 0.779106 3.093713 +v -0.143993 1.901982 1.961045 +v -1.946122 -1.525685 2.065288 +v -0.748086 -0.373290 2.579500 +v -1.803369 -1.795566 2.337522 +v -0.605333 -0.643171 2.851735 +v 0.592703 0.509225 3.365948 +v -2.058771 -2.041239 2.227901 +v 0.848105 0.754897 3.475569 +v -2.540065 -0.402810 0.932619 +v -3.134007 0.720065 -0.200048 +v -3.389409 0.474393 -0.309670 +v -2.795467 -0.648482 0.822998 +v -2.201524 -1.771358 1.955666 +v -0.482534 3.270529 0.937999 +v -0.737936 3.024857 0.828377 +v -1.935972 1.872461 0.314165 +v -2.078725 2.142343 0.041929 +v -3.276761 0.989947 -0.472284 +v -0.880689 3.294739 0.556142 +v -3.532163 0.744275 -0.581905 +v -0.625287 3.540411 0.665764 +v 1.935972 -1.872461 -0.314165 +v 1.677995 -1.728369 -0.036042 +v 1.820749 -1.998251 0.236193 +v 2.078725 -2.142343 -0.041929 +v 2.876031 -0.575973 0.478171 +v 0.479959 -2.880765 -0.550255 +v 1.677995 -1.728369 -0.036042 +vn 0.635737 -0.355088 -0.685384 +vn 0.688513 0.662283 0.295519 +vn -0.688513 -0.662283 -0.295518 +vn -0.348983 0.659767 -0.665521 +vn 0.348982 -0.659767 0.665521 +vn -0.348982 0.659767 -0.665521 +vn 0.348982 -0.659768 0.665521 +vn -0.688513 -0.662283 -0.295519 +vn 0.348983 -0.659767 0.665521 +vn -0.348982 0.659768 -0.665521 +vn 0.688513 0.662283 0.295518 +vn 0.635737 -0.355089 -0.685383 +vn -0.635737 0.355088 0.685384 +vn 0.688512 0.662283 0.295519 +vn -0.635737 0.355089 0.685383 +vn -0.688512 -0.662283 -0.295519 +vn 0.635737 -0.355089 -0.685384 +vn -0.635737 0.355089 0.685384 +s off +f 287//30 288//30 289//30 290//30 +f 288//31 287//31 291//31 292//31 +f 290//32 289//32 293//32 294//32 +f 295//33 296//33 297//33 298//33 +f 299//34 300//34 301//34 302//34 +f 303//33 304//33 305//33 306//33 +f 307//35 308//35 309//35 310//35 +f 311//36 312//36 313//36 314//36 +f 315//35 316//35 317//35 318//35 +f 318//37 317//37 312//37 311//37 +f 311//37 319//37 320//37 318//37 +f 318//33 320//33 321//33 315//33 +f 314//38 322//38 319//38 311//38 +f 310//35 323//35 324//35 307//35 +f 306//39 325//39 326//39 303//39 +f 302//34 327//34 328//34 299//34 +f 298//33 289//33 288//33 295//33 +f 295//40 288//40 327//40 302//40 +f 299//37 328//37 289//37 298//37 +f 329//33 330//33 316//33 331//33 +f 332//33 321//33 333//33 334//33 +f 385//7 386//7 419//7 418//7 +f 336//38 335//38 322//38 337//38 +f 337//38 328//38 338//38 336//38 +f 386//7 388//7 421//7 419//7 +f 334//33 293//33 289//33 332//33 +f 332//41 289//41 328//41 337//41 +f 335//38 339//38 319//38 322//38 +f 328//38 327//38 340//38 338//38 +f 372//7 339//7 408//7 414//7 +f 327//31 288//31 292//31 340//31 +f 341//33 342//33 308//33 343//33 +f 344//41 345//41 342//41 341//41 +f 346//32 347//32 348//32 349//32 +f 350//40 351//40 352//40 353//40 +f 353//42 352//42 347//42 346//42 +f 349//41 348//41 351//41 350//41 +f 350//41 354//41 355//41 349//41 +f 356//41 330//41 357//41 358//41 +f 358//41 359//41 345//41 356//41 +f 360//42 361//42 362//42 363//42 +f 364//41 365//41 366//41 367//41 +f 291//7 373//7 415//7 399//7 +f 340//7 292//7 400//7 409//7 +f 334//7 333//7 403//7 404//7 +f 373//7 389//7 422//7 415//7 +f 376//41 287//41 290//41 375//41 +f 287//43 376//43 373//43 291//43 +f 294//37 374//37 375//37 290//37 +f 306//37 305//37 347//37 377//37 +f 378//31 352//31 304//31 303//31 +f 377//38 347//38 352//38 378//38 +f 379//38 362//38 361//38 380//38 +f 310//32 309//32 362//32 379//32 +f 380//31 361//31 308//31 307//31 +f 307//31 324//31 366//31 380//31 +f 343//44 308//44 361//44 381//44 +f 382//41 366//41 324//41 383//41 +f 379//32 365//32 323//32 310//32 +f 380//38 366//38 365//38 379//38 +f 378//34 376//34 375//34 377//34 +f 303//31 326//31 376//31 378//31 +f 377//37 375//37 325//37 306//37 +f 381//38 361//38 345//38 344//38 +f 384//38 369//38 366//38 382//38 +f 389//7 387//7 420//7 422//7 +f 383//33 324//33 386//33 385//33 +f 385//33 387//33 325//33 383//33 +f 292//7 291//7 399//7 400//7 +f 382//38 375//38 374//38 384//38 +f 383//41 325//41 375//41 382//41 +f 324//33 323//33 388//33 386//33 +f 387//35 389//35 326//35 325//35 +f 293//7 334//7 404//7 401//7 +f 389//43 373//43 376//43 326//43 +f 312//45 317//45 357//45 390//45 +f 357//46 330//46 391//46 390//46 +f 314//31 313//31 316//31 315//31 +f 315//31 321//31 322//31 314//31 +f 360//31 316//31 330//31 356//31 +f 358//45 357//45 317//45 363//45 +f 363//44 317//44 316//44 360//44 +f 367//30 321//30 320//30 364//30 +f 364//32 320//32 372//32 371//32 +f 368//40 333//40 321//40 367//40 +f 331//44 316//44 313//44 392//44 +f 337//46 322//46 321//46 332//46 +f 388//7 370//7 412//7 421//7 +f 339//32 372//32 320//32 319//32 +f 393//37 359//37 362//37 309//37 +f 393//41 342//41 345//41 359//41 +f 356//40 345//40 361//40 360//40 +f 363//37 362//37 359//37 358//37 +f 371//32 370//32 365//32 364//32 +f 367//40 366//40 369//40 368//40 +f 374//7 294//7 402//7 416//7 +f 323//32 365//32 370//32 388//32 +f 346//44 297//44 296//44 353//44 +f 353//40 296//40 354//40 350//40 +f 349//32 355//32 297//32 346//32 +f 302//40 301//40 296//40 295//40 +f 298//37 297//37 300//37 299//37 +f 394//41 391//41 330//41 329//41 +f 392//38 313//38 391//38 394//38 +f 394//38 395//38 300//38 392//38 +f 329//41 355//41 395//41 394//41 +f 331//33 297//33 355//33 329//33 +f 392//44 300//44 297//44 331//44 +f 313//34 312//34 390//34 391//34 +f 395//38 396//38 301//38 300//38 +f 396//41 395//41 355//41 354//41 +f 396//40 354//40 296//40 301//40 +f 343//33 305//33 397//33 341//33 +f 341//41 397//41 348//41 344//41 +f 344//38 348//38 347//38 381//38 +f 381//47 347//47 305//47 343//47 +f 342//33 393//33 309//33 308//33 +f 305//33 304//33 398//33 397//33 +f 351//41 348//41 397//41 398//41 +f 304//40 352//40 351//40 398//40 +f 404//44 403//44 405//44 406//44 +f 406//44 407//44 401//44 404//44 +f 400//44 401//44 407//44 409//44 +f 410//44 411//44 412//44 413//44 +f 413//44 414//44 403//44 410//44 +f 402//44 401//44 400//44 399//44 +f 399//44 415//44 416//44 402//44 +f 418//44 419//44 411//44 417//44 +f 417//44 416//44 420//44 418//44 +f 422//47 420//47 416//47 415//47 +f 408//44 405//44 403//44 414//44 +f 412//44 411//44 419//44 421//44 +f 368//7 369//7 411//7 410//7 +f 335//7 336//7 406//7 405//7 +f 370//7 371//7 413//7 412//7 +f 336//7 338//7 407//7 406//7 +f 338//7 340//7 409//7 407//7 +f 339//7 335//7 405//7 408//7 +f 294//7 293//7 401//7 402//7 +f 371//7 372//7 414//7 413//7 +f 369//7 384//7 417//7 411//7 +f 333//7 368//7 410//7 403//7 +f 387//7 385//7 418//7 420//7 +f 384//7 374//7 416//7 417//7 +f 394//7 392//7 425//7 426//7 +f 331//7 329//7 423//7 424//7 +f 392//7 331//7 424//7 425//7 +f 329//7 394//7 426//7 423//7 +f 316//7 331//7 429//7 428//7 +f 331//7 297//7 427//7 429//7 diff --git a/examples/16-shadowmaps/makefile b/examples/16-shadowmaps/makefile new file mode 100644 index 000000000..6525ae16a --- /dev/null +++ b/examples/16-shadowmaps/makefile @@ -0,0 +1,22 @@ +# +# Copyright 2013 Dario Manesku. All rights reserved. +# License: http://www.opensource.org/licenses/BSD-2-Clause +# + +BGFX_DIR=../.. +RUNTIME_DIR=$(BGFX_DIR)/examples/runtime +BUILD_DIR=../../.build + +include $(BGFX_DIR)/premake/shader.mk + +geometry: ../runtime/meshes/column.bin + +../runtime/meshes/column.bin: column.obj + ../../tools/bin/geometryc -f column.obj -o ../runtime/meshes/column.bin --packnormal 1 + +rebuild: + @make -s --no-print-directory TARGET=0 clean all + @make -s --no-print-directory TARGET=1 clean all + @make -s --no-print-directory TARGET=2 clean all + @make -s --no-print-directory TARGET=3 clean all + @make -s --no-print-directory TARGET=4 clean all diff --git a/examples/16-shadowmaps/shadowmaps.cpp b/examples/16-shadowmaps/shadowmaps.cpp new file mode 100644 index 000000000..1ba57667c --- /dev/null +++ b/examples/16-shadowmaps/shadowmaps.cpp @@ -0,0 +1,3296 @@ +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include +#include +#include + +#include "common.h" + +#include +#include +#include +#include "entry/entry.h" +#include "entry/camera.h" +#include "fpumath.h" +#include "imgui/imgui.h" + +#define RENDER_PASS_0 1 +#define RENDER_PASS_1 2 +#define RENDER_PASS_2 3 +#define RENDER_PASS_3 4 +#define RENDER_PASS_4 5 +#define RENDER_PASS_5 6 +#define RENDER_PASS_6 7 +#define RENDER_PASS_7 8 +#define RENDER_PASS_8 9 +#define RENDER_PASS_9 10 +#define RENDER_PASS_10 11 +#define RENDER_PASS_11 12 +#define RENDER_PASS_12 13 +#define RENDER_PASS_13 14 +#define RENDER_PASS_14 15 +#define RENDER_PASS_15 16 +#define RENDER_PASS_16 17 +#define RENDER_PASS_17 18 +#define RENDER_PASS_18 19 + +uint32_t packUint32(uint8_t _x, uint8_t _y, uint8_t _z, uint8_t _w) +{ + union + { + uint32_t ui32; + uint8_t arr[4]; + } un; + + un.arr[0] = _x; + un.arr[1] = _y; + un.arr[2] = _z; + un.arr[3] = _w; + + return un.ui32; +} + +uint32_t packF4u(float _x, float _y = 0.0f, float _z = 0.0f, float _w = 0.0f) +{ + const uint8_t xx = uint8_t(_x*127.0f + 128.0f); + const uint8_t yy = uint8_t(_y*127.0f + 128.0f); + const uint8_t zz = uint8_t(_z*127.0f + 128.0f); + const uint8_t ww = uint8_t(_w*127.0f + 128.0f); + return packUint32(xx, yy, zz, ww); +} + +struct LightType +{ + enum Enum + { + SpotLight = 0, + PointLight = 1, + DirectionalLight = 2, + + Count + }; + +}; + +struct DepthImpl +{ + enum Enum + { + InvZ = 0, + Linear = 1, + + Count + }; +}; + +struct PackDepth +{ + enum Enum + { + RGBA = 0, + VSM = 1, + + Count + }; +}; + +struct SmImpl +{ + enum Enum + { + Hard = 0, + PCF = 1, + VSM = 2, + ESM = 3, + + Count + }; +}; + +struct SmType +{ + enum Enum + { + Single = 0, + Omni = 1, + Cascade = 2, + + Count + }; +}; + +struct TetrahedronFaces +{ + enum Enum + { + Green = 0, + Yellow = 1, + Blue = 2, + Red = 3, + + Count = 4 + }; +}; + +struct ProjType +{ + enum Enum + { + Horizontal = 0, + Vertical = 1, + + Count + }; +}; + +struct ShadowMapRenderTargets +{ + enum Enum + { + First = 0, + Second = 1, + Third = 2, + Fourth = 3, + + Count + }; +}; + +void imguiEnum(SmImpl::Enum& _enum) +{ + if (imguiCheck("Hard", SmImpl::Hard == _enum) ) + { + _enum = SmImpl::Hard; + } + + if (imguiCheck("PCF", SmImpl::PCF == _enum) ) + { + _enum = SmImpl::PCF; + } + + if (imguiCheck("VSM", SmImpl::VSM == _enum) ) + { + _enum = SmImpl::VSM; + } + + if (imguiCheck("ESM", SmImpl::ESM == _enum) ) + { + _enum = SmImpl::ESM; + } +} + +void imguiEnum(DepthImpl::Enum& _enum) +{ + if (imguiCheck("InvZ", DepthImpl::InvZ == _enum) ) + { + _enum = DepthImpl::InvZ; + } + + if (imguiCheck("Linear", DepthImpl::Linear == _enum) ) + { + _enum = DepthImpl::Linear; + } +} + +void imguiEnum(LightType::Enum& _enum) +{ + if (imguiCheck("Spot light", LightType::SpotLight == _enum) ) + { + _enum = LightType::SpotLight; + } + + if (imguiCheck("Point light", LightType::PointLight == _enum) ) + { + _enum = LightType::PointLight; + } + + if (imguiCheck("Directional light", LightType::DirectionalLight == _enum) ) + { + _enum = LightType::DirectionalLight; + } +} + +void imguiBool(const char* _str, bool& _flag, bool _enabled = true) +{ + if (imguiCheck(_str, _flag, _enabled) ) + { + _flag = !_flag; + } +} + +struct PosNormalTexcoordVertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_normal; + float m_u; + float m_v; +}; + +static const float s_texcoord = 5.0f; +static const uint32_t s_numHPlaneVertices = 4; +static PosNormalTexcoordVertex s_hplaneVertices[s_numHPlaneVertices] = +{ + { -1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, s_texcoord }, + { 1.0f, 0.0f, 1.0f, packF4u(0.0f, 1.0f, 0.0f), s_texcoord, 0.0f }, + { -1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, s_texcoord }, + { 1.0f, 0.0f, -1.0f, packF4u(0.0f, 1.0f, 0.0f), 0.0f, 0.0f }, +}; + +static const uint32_t s_numVPlaneVertices = 4; +static PosNormalTexcoordVertex s_vplaneVertices[s_numVPlaneVertices] = +{ + { -1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 1.0f }, + { 1.0f, 1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 1.0f, 0.0f }, + { -1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 1.0f }, + { 1.0f, -1.0f, 0.0f, packF4u(0.0f, 0.0f, -1.0f), 0.0f, 0.0f }, +}; + +static const uint32_t s_numPlaneIndices = 6; +static const uint16_t s_planeIndices[s_numPlaneIndices] = +{ + 0, 1, 2, + 1, 3, 2, +}; + +static const char* s_shaderPath = NULL; +static bool s_flipV = false; +static float s_texelHalf = 0.0f; + +static bgfx::UniformHandle u_texColor; +static bgfx::UniformHandle u_shadowMap[ShadowMapRenderTargets::Count]; +static bgfx::RenderTargetHandle s_rtShadowMap[ShadowMapRenderTargets::Count]; +static bgfx::RenderTargetHandle s_rtBlur; + +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); + size_t ignore = fread(mem->data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + mem->data[mem->size-1] = '\0'; + return mem; + } + + return NULL; +} + +static const bgfx::Memory* loadShader(const char* _name) +{ + char filePath[512]; + shaderFilePath(filePath, _name); + return load(filePath); +} + +static const bgfx::Memory* loadTexture(const char* _name) +{ + char filePath[512]; + strcpy(filePath, "textures/"); + strcat(filePath, _name); + 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; +} + +void mtxScaleRotateTranslate(float* _result + , const float _scaleX + , const float _scaleY + , const float _scaleZ + , const float _rotX + , const float _rotY + , const float _rotZ + , const float _translateX + , const float _translateY + , const float _translateZ + ) +{ + float mtxRotateTranslate[16]; + float mtxScale[16]; + + mtxRotateXYZ(mtxRotateTranslate, _rotX, _rotY, _rotZ); + mtxRotateTranslate[12] = _translateX; + mtxRotateTranslate[13] = _translateY; + mtxRotateTranslate[14] = _translateZ; + + memset(mtxScale, 0, sizeof(float)*16); + mtxScale[0] = _scaleX; + mtxScale[5] = _scaleY; + mtxScale[10] = _scaleZ; + mtxScale[15] = 1.0f; + + mtxMul(_result, mtxScale, mtxRotateTranslate); +} + +void mtxBillboard(float* __restrict _result + , const float* __restrict _view + , const float* __restrict _pos + , const float* __restrict _scale) +{ + _result[ 0] = _view[0] * _scale[0]; + _result[ 1] = _view[4] * _scale[0]; + _result[ 2] = _view[8] * _scale[0]; + _result[ 3] = 0.0f; + _result[ 4] = _view[1] * _scale[1]; + _result[ 5] = _view[5] * _scale[1]; + _result[ 6] = _view[9] * _scale[1]; + _result[ 7] = 0.0f; + _result[ 8] = _view[2] * _scale[2]; + _result[ 9] = _view[6] * _scale[2]; + _result[10] = _view[10] * _scale[2]; + _result[11] = 0.0f; + _result[12] = _pos[0]; + _result[13] = _pos[1]; + _result[14] = _pos[2]; + _result[15] = 1.0f; +} + +void mtxYawPitchRoll(float* __restrict _result + , float _yaw + , float _pitch + , float _roll + ) +{ + float sroll = sinf(_roll); + float croll = cosf(_roll); + float spitch = sinf(_pitch); + float cpitch = cosf(_pitch); + float syaw = sinf(_yaw); + float cyaw = cosf(_yaw); + + _result[ 0] = sroll * spitch * syaw + croll * cyaw; + _result[ 1] = sroll * cpitch; + _result[ 2] = sroll * spitch * cyaw - croll * syaw; + _result[ 3] = 0.0f; + _result[ 4] = croll * spitch * syaw - sroll * cyaw; + _result[ 5] = croll * cpitch; + _result[ 6] = croll * spitch * cyaw + sroll * syaw; + _result[ 7] = 0.0f; + _result[ 8] = cpitch * syaw; + _result[ 9] = -spitch; + _result[10] = cpitch * cyaw; + _result[11] = 0.0f; + _result[12] = 0.0f; + _result[13] = 0.0f; + _result[14] = 0.0f; + _result[15] = 1.0f; +} + +struct Material +{ + union Ambient + { + struct + { + float m_r; + float m_g; + float m_b; + float m_unused; + }; + + float m_v[4]; + }; + + union Diffuse + { + struct + { + float m_r; + float m_g; + float m_b; + float m_unused; + }; + + float m_v[4]; + }; + + union Specular + { + struct + { + float m_r; + float m_g; + float m_b; + float m_ns; + }; + + float m_v[4]; + }; + + Ambient m_ka; + Diffuse m_kd; + Specular m_ks; +}; + +struct Light +{ + union Position + { + struct + { + float m_x; + float m_y; + float m_z; + float m_w; + }; + + float m_v[4]; + }; + + union LightRgbPower + { + struct + { + float m_r; + float m_g; + float m_b; + float m_power; + }; + + float m_v[4]; + }; + + union SpotDirectionInner + { + struct + { + float m_x; + float m_y; + float m_z; + float m_inner; + }; + + float m_v[4]; + }; + + union AttenuationSpotOuter + { + struct + { + float m_attnConst; + float m_attnLinear; + float m_attnQuadrantic; + float m_outer; + }; + + float m_v[4]; + }; + + void computeViewSpaceComponents(float* _viewMtx) + { + vec4MulMtx(m_position_viewSpace, m_position.m_v, _viewMtx); + + float tmp[] = + { + m_spotDirectionInner.m_x + , m_spotDirectionInner.m_y + , m_spotDirectionInner.m_z + , 0.0f + }; + vec4MulMtx(m_spotDirectionInner_viewSpace, tmp, _viewMtx); + m_spotDirectionInner_viewSpace[3] = m_spotDirectionInner.m_v[3]; + } + + Position m_position; + float m_position_viewSpace[4]; + LightRgbPower m_ambientPower; + LightRgbPower m_diffusePower; + LightRgbPower m_specularPower; + SpotDirectionInner m_spotDirectionInner; + float m_spotDirectionInner_viewSpace[4]; + AttenuationSpotOuter m_attenuationSpotOuter; +}; + +struct Uniforms +{ + void init() + { + m_ambientPass = 1.0f; + m_lightningPass = 1.0f; + + m_shadowMapBias = 0.003f; + m_shadowMapOffset = 0.0f; + m_shadowMapParam0 = 0.5; + m_shadowMapParam1 = 1.0; + m_depthValuePow = 1.0f; + m_showSmCoverage = 1.0f; + m_shadowMapTexelSize = 1.0f/512.0f; + + m_csmFarDistances[0] = 30.0f; + m_csmFarDistances[1] = 90.0f; + m_csmFarDistances[2] = 180.0f; + m_csmFarDistances[3] = 1000.0f; + + m_tetraNormalGreen[0] = 0.0f; + m_tetraNormalGreen[1] = -0.57735026f; + m_tetraNormalGreen[2] = 0.81649661f; + + m_tetraNormalYellow[0] = 0.0f; + m_tetraNormalYellow[1] = -0.57735026f; + m_tetraNormalYellow[2] = -0.81649661f; + + m_tetraNormalBlue[0] = -0.81649661f; + m_tetraNormalBlue[1] = 0.57735026f; + m_tetraNormalBlue[2] = 0.0f; + + m_tetraNormalRed[0] = 0.81649661f; + m_tetraNormalRed[1] = 0.57735026f; + m_tetraNormalRed[2] = 0.0f; + + m_XNum = 2.0f; + m_YNum = 2.0f; + m_XOffset = 10.0f/512.0f; + m_YOffset = 10.0f/512.0f; + + u_params0 = bgfx::createUniform("u_params0", bgfx::UniformType::Uniform4fv); + u_params1 = bgfx::createUniform("u_params1", bgfx::UniformType::Uniform4fv); + u_params2 = bgfx::createUniform("u_params2", bgfx::UniformType::Uniform4fv); + u_color = bgfx::createUniform("u_color", bgfx::UniformType::Uniform4fv); + u_smSamplingParams = bgfx::createUniform("u_smSamplingParams", bgfx::UniformType::Uniform4fv); + u_csmFarDistances = bgfx::createUniform("u_csmFarDistances", bgfx::UniformType::Uniform4fv); + u_lightMtx = bgfx::createUniform("u_lightMtx", bgfx::UniformType::Uniform4x4fv); + + u_tetraNormalGreen = bgfx::createUniform("u_tetraNormalGreen", bgfx::UniformType::Uniform3fv); + u_tetraNormalYellow = bgfx::createUniform("u_tetraNormalYellow", bgfx::UniformType::Uniform3fv); + u_tetraNormalBlue = bgfx::createUniform("u_tetraNormalBlue", bgfx::UniformType::Uniform3fv); + u_tetraNormalRed = bgfx::createUniform("u_tetraNormalRed", bgfx::UniformType::Uniform3fv); + + u_shadowMapMtx0 = bgfx::createUniform("u_shadowMapMtx0", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx1 = bgfx::createUniform("u_shadowMapMtx1", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx2 = bgfx::createUniform("u_shadowMapMtx2", bgfx::UniformType::Uniform4x4fv); + u_shadowMapMtx3 = bgfx::createUniform("u_shadowMapMtx3", bgfx::UniformType::Uniform4x4fv); + + u_lightPosition = bgfx::createUniform("u_lightPosition", bgfx::UniformType::Uniform4fv); + u_lightAmbientPower = bgfx::createUniform("u_lightAmbientPower", bgfx::UniformType::Uniform4fv); + u_lightDiffusePower = bgfx::createUniform("u_lightDiffusePower", bgfx::UniformType::Uniform4fv); + u_lightSpecularPower = bgfx::createUniform("u_lightSpecularPower", bgfx::UniformType::Uniform4fv); + u_lightSpotDirectionInner = bgfx::createUniform("u_lightSpotDirectionInner", bgfx::UniformType::Uniform4fv); + u_lightAttenuationSpotOuter = bgfx::createUniform("u_lightAttenuationSpotOuter", bgfx::UniformType::Uniform4fv); + + u_materialKa = bgfx::createUniform("u_materialKa", bgfx::UniformType::Uniform4fv); + u_materialKd = bgfx::createUniform("u_materialKd", bgfx::UniformType::Uniform4fv); + u_materialKs = bgfx::createUniform("u_materialKs", bgfx::UniformType::Uniform4fv); + + } + + void setPtrs(Material* _materialPtr, Light* _lightPtr, float* _colorPtr, float* _lightMtxPtr, float* _shadowMapMtx0, float* _shadowMapMtx1, float* _shadowMapMtx2, float* _shadowMapMtx3) + { + m_lightMtxPtr = _lightMtxPtr; + m_colorPtr = _colorPtr; + m_materialPtr = _materialPtr; + m_lightPtr = _lightPtr; + + m_shadowMapMtx0 = _shadowMapMtx0; + m_shadowMapMtx1 = _shadowMapMtx1; + m_shadowMapMtx2 = _shadowMapMtx2; + m_shadowMapMtx3 = _shadowMapMtx3; + } + + // Call this once at initialization. + void submitConstUniforms() + { + bgfx::setUniform(u_tetraNormalGreen, m_tetraNormalGreen); + bgfx::setUniform(u_tetraNormalYellow, m_tetraNormalYellow); + bgfx::setUniform(u_tetraNormalBlue, m_tetraNormalBlue); + bgfx::setUniform(u_tetraNormalRed, m_tetraNormalRed); + } + + // Call this once per frame. + void submitPerFrameUniforms() + { + bgfx::setUniform(u_params1, m_params1); + bgfx::setUniform(u_params2, m_params2); + bgfx::setUniform(u_smSamplingParams, m_paramsBlur); + bgfx::setUniform(u_csmFarDistances, m_csmFarDistances); + + bgfx::setUniform(u_materialKa, &m_materialPtr->m_ka); + bgfx::setUniform(u_materialKd, &m_materialPtr->m_kd); + bgfx::setUniform(u_materialKs, &m_materialPtr->m_ks); + + bgfx::setUniform(u_lightPosition, &m_lightPtr->m_position_viewSpace); + bgfx::setUniform(u_lightAmbientPower, &m_lightPtr->m_ambientPower); + bgfx::setUniform(u_lightDiffusePower, &m_lightPtr->m_diffusePower); + bgfx::setUniform(u_lightSpecularPower, &m_lightPtr->m_specularPower); + bgfx::setUniform(u_lightSpotDirectionInner, &m_lightPtr->m_spotDirectionInner_viewSpace); + bgfx::setUniform(u_lightAttenuationSpotOuter, &m_lightPtr->m_attenuationSpotOuter); + } + + // Call this before each draw call. + void submitPerDrawUniforms() + { + bgfx::setUniform(u_shadowMapMtx0, m_shadowMapMtx0); + bgfx::setUniform(u_shadowMapMtx1, m_shadowMapMtx1); + bgfx::setUniform(u_shadowMapMtx2, m_shadowMapMtx2); + bgfx::setUniform(u_shadowMapMtx3, m_shadowMapMtx3); + + bgfx::setUniform(u_params0, m_params0); + bgfx::setUniform(u_lightMtx, m_lightMtxPtr); + bgfx::setUniform(u_color, m_colorPtr); + } + + void destroy() + { + bgfx::destroyUniform(u_params0); + bgfx::destroyUniform(u_params1); + bgfx::destroyUniform(u_params2); + bgfx::destroyUniform(u_color); + bgfx::destroyUniform(u_smSamplingParams); + bgfx::destroyUniform(u_csmFarDistances); + + bgfx::destroyUniform(u_materialKa); + bgfx::destroyUniform(u_materialKd); + bgfx::destroyUniform(u_materialKs); + + bgfx::destroyUniform(u_tetraNormalGreen); + bgfx::destroyUniform(u_tetraNormalYellow); + bgfx::destroyUniform(u_tetraNormalBlue); + bgfx::destroyUniform(u_tetraNormalRed); + + bgfx::destroyUniform(u_shadowMapMtx0); + bgfx::destroyUniform(u_shadowMapMtx1); + bgfx::destroyUniform(u_shadowMapMtx2); + bgfx::destroyUniform(u_shadowMapMtx3); + + bgfx::destroyUniform(u_lightMtx); + bgfx::destroyUniform(u_lightPosition); + bgfx::destroyUniform(u_lightAmbientPower); + bgfx::destroyUniform(u_lightDiffusePower); + bgfx::destroyUniform(u_lightSpecularPower); + bgfx::destroyUniform(u_lightSpotDirectionInner); + bgfx::destroyUniform(u_lightAttenuationSpotOuter); + } + + union + { + struct + { + float m_ambientPass; + float m_lightningPass; + float m_unused00; + float m_unused01; + }; + + float m_params0[4]; + }; + + union + { + struct + { + float m_shadowMapBias; + float m_shadowMapOffset; + float m_shadowMapParam0; + float m_shadowMapParam1; + }; + + float m_params1[4]; + }; + + union + { + struct + { + float m_depthValuePow; + float m_showSmCoverage; + float m_shadowMapTexelSize; + float m_unused23; + }; + + float m_params2[4]; + }; + + union + { + struct + { + float m_XNum; + float m_YNum; + float m_XOffset; + float m_YOffset; + }; + + float m_paramsBlur[4]; + }; + + float m_tetraNormalGreen[3]; + float m_tetraNormalYellow[3]; + float m_tetraNormalBlue[3]; + float m_tetraNormalRed[3]; + float m_csmFarDistances[4]; + + float* m_lightMtxPtr; + float* m_colorPtr; + Light* m_lightPtr; + float* m_shadowMapMtx0; + float* m_shadowMapMtx1; + float* m_shadowMapMtx2; + float* m_shadowMapMtx3; + Material* m_materialPtr; + +private: + bgfx::UniformHandle u_params0; + bgfx::UniformHandle u_params1; + bgfx::UniformHandle u_params2; + bgfx::UniformHandle u_color; + bgfx::UniformHandle u_smSamplingParams; + bgfx::UniformHandle u_csmFarDistances; + + bgfx::UniformHandle u_materialKa; + bgfx::UniformHandle u_materialKd; + bgfx::UniformHandle u_materialKs; + + bgfx::UniformHandle u_tetraNormalGreen; + bgfx::UniformHandle u_tetraNormalYellow; + bgfx::UniformHandle u_tetraNormalBlue; + bgfx::UniformHandle u_tetraNormalRed; + + bgfx::UniformHandle u_shadowMapMtx0; + bgfx::UniformHandle u_shadowMapMtx1; + bgfx::UniformHandle u_shadowMapMtx2; + bgfx::UniformHandle u_shadowMapMtx3; + + bgfx::UniformHandle u_lightMtx; + bgfx::UniformHandle u_lightPosition; + bgfx::UniformHandle u_lightAmbientPower; + bgfx::UniformHandle u_lightDiffusePower; + bgfx::UniformHandle u_lightSpecularPower; + bgfx::UniformHandle u_lightSpotDirectionInner; + bgfx::UniformHandle u_lightAttenuationSpotOuter; +}; +static Uniforms s_uniforms; + +struct RenderState +{ + enum Enum + { + Default = 0, + + ShadowMap_PackDepth, + ShadowMap_PackDepthHoriz, + ShadowMap_PackDepthVert, + + Custom_BlendLightTexture, + Custom_DrawPlaneBottom, + + Count + }; + + uint64_t m_state; + uint32_t m_blendFactorRgba; + uint32_t m_fstencil; + uint32_t m_bstencil; +}; + +static RenderState s_renderStates[RenderState::Count] = +{ + { // Default + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepth + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepthHoriz + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_TEST_EQUAL + | BGFX_STENCIL_FUNC_REF(1) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_KEEP + | BGFX_STENCIL_OP_FAIL_Z_KEEP + | BGFX_STENCIL_OP_PASS_Z_KEEP + , BGFX_STENCIL_NONE + }, + { // ShadowMap_PackDepthVert + 0 + | BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_TEST_EQUAL + | BGFX_STENCIL_FUNC_REF(0) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_KEEP + | BGFX_STENCIL_OP_FAIL_Z_KEEP + | BGFX_STENCIL_OP_PASS_Z_KEEP + , BGFX_STENCIL_NONE + }, + { // Custom_BlendLightTexture + BGFX_STATE_RGB_WRITE + | BGFX_STATE_ALPHA_WRITE + | BGFX_STATE_DEPTH_WRITE + | BGFX_STATE_DEPTH_TEST_LESS + | BGFX_STATE_BLEND_FUNC(BGFX_STATE_BLEND_SRC_COLOR, BGFX_STATE_BLEND_INV_SRC_COLOR) + | BGFX_STATE_CULL_CCW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, + { // Custom_DrawPlaneBottom + BGFX_STATE_RGB_WRITE + | BGFX_STATE_CULL_CW + | BGFX_STATE_MSAA + , UINT32_MAX + , BGFX_STENCIL_NONE + , BGFX_STENCIL_NONE + }, +}; + +struct ViewState +{ + ViewState(uint32_t _width = 1280, uint32_t _height = 720) + : m_width(_width) + , m_height(_height) + { + } + + uint32_t m_width; + uint32_t m_height; + + float m_view[16]; + float m_proj[16]; +}; + +struct ClearValues +{ + ClearValues(uint32_t _clearRgba = 0x30303000 + , float _clearDepth = 1.0f + , uint8_t _clearStencil = 0 + ) + : m_clearRgba(_clearRgba) + , m_clearDepth(_clearDepth) + , m_clearStencil(_clearStencil) + { + } + + uint32_t m_clearRgba; + float m_clearDepth; + uint8_t m_clearStencil; +}; + +struct Aabb +{ + float m_min[3]; + float m_max[3]; +}; + +struct Obb +{ + float m_mtx[16]; +}; + +struct Sphere +{ + float m_center[3]; + float m_radius; +}; + +struct Primitive +{ + uint32_t m_startIndex; + uint32_t m_numIndices; + uint32_t m_startVertex; + uint32_t m_numVertices; + + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; +}; + +typedef std::vector PrimitiveArray; + +struct Group +{ + Group() + { + reset(); + } + + void reset() + { + m_vbh.idx = bgfx::invalidHandle; + m_ibh.idx = bgfx::invalidHandle; + m_prims.clear(); + } + + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; + Sphere m_sphere; + Aabb m_aabb; + Obb m_obb; + PrimitiveArray m_prims; +}; + +struct Mesh +{ + void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + { + Group group; + const bgfx::Memory* mem; + uint32_t size; + + size = _numVertices*_decl.getStride(); + mem = bgfx::makeRef(_vertices, size); + group.m_vbh = bgfx::createVertexBuffer(mem, _decl); + + size = _numIndices*2; + mem = bgfx::makeRef(_indices, size); + group.m_ibh = bgfx::createIndexBuffer(mem); + + //TODO: + // group.m_sphere = ... + // group.m_aabb = ... + // group.m_obb = ... + // group.m_prims = ... + + m_groups.push_back(group); + } + + void load(const char* _filePath) + { +#define BGFX_CHUNK_MAGIC_VB BX_MAKEFOURCC('V', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_IB BX_MAKEFOURCC('I', 'B', ' ', 0x0) +#define BGFX_CHUNK_MAGIC_PRI BX_MAKEFOURCC('P', 'R', 'I', 0x0) + + bx::CrtFileReader reader; + reader.open(_filePath); + + Group group; + + uint32_t chunk; + while (4 == bx::read(&reader, chunk) ) + { + switch (chunk) + { + case BGFX_CHUNK_MAGIC_VB: + { + bx::read(&reader, group.m_sphere); + bx::read(&reader, group.m_aabb); + bx::read(&reader, group.m_obb); + + bx::read(&reader, m_decl); + uint16_t stride = m_decl.getStride(); + + uint16_t numVertices; + bx::read(&reader, numVertices); + const bgfx::Memory* mem = bgfx::alloc(numVertices*stride); + bx::read(&reader, mem->data, mem->size); + + group.m_vbh = bgfx::createVertexBuffer(mem, m_decl); + } + break; + + case BGFX_CHUNK_MAGIC_IB: + { + uint32_t numIndices; + bx::read(&reader, numIndices); + const bgfx::Memory* mem = bgfx::alloc(numIndices*2); + bx::read(&reader, mem->data, mem->size); + group.m_ibh = bgfx::createIndexBuffer(mem); + } + break; + + case BGFX_CHUNK_MAGIC_PRI: + { + uint16_t len; + bx::read(&reader, len); + + std::string material; + material.resize(len); + bx::read(&reader, const_cast(material.c_str() ), len); + + uint16_t num; + bx::read(&reader, num); + + for (uint32_t ii = 0; ii < num; ++ii) + { + bx::read(&reader, len); + + std::string name; + name.resize(len); + bx::read(&reader, const_cast(name.c_str() ), len); + + Primitive prim; + bx::read(&reader, prim.m_startIndex); + bx::read(&reader, prim.m_numIndices); + bx::read(&reader, prim.m_startVertex); + bx::read(&reader, prim.m_numVertices); + bx::read(&reader, prim.m_sphere); + bx::read(&reader, prim.m_aabb); + bx::read(&reader, prim.m_obb); + + group.m_prims.push_back(prim); + } + + m_groups.push_back(group); + group.reset(); + } + break; + + default: + DBG("%08x at %d", chunk, reader.seek() ); + break; + } + } + + reader.close(); + } + + void unload() + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + bgfx::destroyVertexBuffer(group.m_vbh); + + if (bgfx::invalidHandle != group.m_ibh.idx) + { + bgfx::destroyIndexBuffer(group.m_ibh); + } + } + m_groups.clear(); + } + + void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState) + { + bgfx::TextureHandle texture = BGFX_INVALID_HANDLE; + submit(_viewId, _mtx, _program, _renderState, texture); + } + + void submit(uint8_t _viewId, float* _mtx, bgfx::ProgramHandle _program, const RenderState& _renderState, bgfx::TextureHandle _texture) + { + for (GroupArray::const_iterator it = m_groups.begin(), itEnd = m_groups.end(); it != itEnd; ++it) + { + const Group& group = *it; + + // Set uniforms. + s_uniforms.submitPerDrawUniforms(); + + // Set model matrix for rendering. + bgfx::setTransform(_mtx); + bgfx::setProgram(_program); + bgfx::setIndexBuffer(group.m_ibh); + bgfx::setVertexBuffer(group.m_vbh); + + // Set textures. + if (bgfx::invalidHandle != _texture.idx) + { + bgfx::setTexture(0, u_texColor, _texture); + } + + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::setTexture(4 + ii, u_shadowMap[ii], s_rtShadowMap[ii]); + } + + // Apply render state. + bgfx::setStencil(_renderState.m_fstencil, _renderState.m_bstencil); + bgfx::setState(_renderState.m_state, _renderState.m_blendFactorRgba); + + // Submit. + bgfx::submit(_viewId); + } + } + + bgfx::VertexDecl m_decl; + typedef std::vector GroupArray; + GroupArray m_groups; +}; + +struct PosColorTexCoord0Vertex +{ + float m_x; + float m_y; + float m_z; + uint32_t m_rgba; + float m_u; + float m_v; + + static void init() + { + ms_decl.begin(); + ms_decl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + ms_decl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true); + ms_decl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + ms_decl.end(); + } + + static bgfx::VertexDecl ms_decl; +}; + +bgfx::VertexDecl PosColorTexCoord0Vertex::ms_decl; + +void screenSpaceQuad(float _textureWidth, float _textureHeight, bool _originBottomLeft = true, float _width = 1.0f, float _height = 1.0f) +{ + if (bgfx::checkAvailTransientVertexBuffer(3, PosColorTexCoord0Vertex::ms_decl) ) + { + bgfx::TransientVertexBuffer vb; + bgfx::allocTransientVertexBuffer(&vb, 3, PosColorTexCoord0Vertex::ms_decl); + PosColorTexCoord0Vertex* vertex = (PosColorTexCoord0Vertex*)vb.data; + + const float zz = 0.0f; + + const float minx = -_width; + const float maxx = _width; + const float miny = 0.0f; + const float maxy = _height*2.0f; + + const float texelHalfW = s_texelHalf/_textureWidth; + const float texelHalfH = s_texelHalf/_textureHeight; + const float minu = -1.0f + texelHalfW; + const float maxu = 1.0f + texelHalfW; + + float minv = texelHalfH; + float maxv = 2.0f + texelHalfH; + + if (_originBottomLeft) + { + std::swap(minv, maxv); + minv -= 1.0f; + maxv -= 1.0f; + } + + vertex[0].m_x = minx; + vertex[0].m_y = miny; + vertex[0].m_z = zz; + vertex[0].m_rgba = 0xffffffff; + 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_rgba = 0xffffffff; + 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_rgba = 0xffffffff; + vertex[2].m_u = maxu; + vertex[2].m_v = maxv; + + bgfx::setVertexBuffer(&vb); + } +} + +void worldSpaceFrustumCorners(float* _corners24f + , float _near + , float _far + , float _projWidth + , float _projHeight + , const float* __restrict _invViewMtx + ) +{ + // Define frustum corners in view space. + const float nw = _near * _projWidth; + const float nh = _near * _projHeight; + const float fw = _far * _projWidth; + const float fh = _far * _projHeight; + + const uint8_t numCorners = 8; + const float corners[numCorners][3] = + { + { -nw, nh, _near }, + { nw, nh, _near }, + { nw, -nh, _near }, + { -nw, -nh, _near }, + { -fw, fh, _far }, + { fw, fh, _far }, + { fw, -fh, _far }, + { -fw, -fh, _far }, + }; + + // Convert them to world space. + float (*out)[3] = (float(*)[3])_corners24f; + for (uint8_t ii = 0; ii < numCorners; ++ii) + { + vec3MulMtx( (float*)&out[ii], (float*)&corners[ii], _invViewMtx); + } +} + +/** + * _splits = { near0, far0, near1, far1... nearN, farN } + * N = _numSplits + */ +void splitFrustum(float* _splits, uint8_t _numSplits, float _near, float _far, float _splitWeight = 0.75f) +{ + const float l = _splitWeight; + const float ratio = _far/_near; + const int8_t numSlices = _numSplits*2; + const float numSlicesf = float(numSlices); + + // First slice. + _splits[0] = _near; + + for (uint8_t nn = 2, ff = 1; nn < numSlices; nn+=2, ff+=2) + { + float si = float(int8_t(ff) ) / numSlicesf; + + const float nearp = l*(_near*powf(ratio, si) ) + (1 - l)*(_near + (_far - _near)*si); + _splits[nn] = nearp; //near + _splits[ff] = nearp * 1.005f; //far from previous split + } + + // Last slice. + _splits[numSlices-1] = _far; +} + +struct Programs +{ + void init() + { + // Misc. + m_black = loadProgram("vs_shadowmaps_color", "fs_shadowmaps_color_black"); + m_texture = loadProgram("vs_shadowmaps_texture", "fs_shadowmaps_texture"); + m_colorTexture = loadProgram("vs_shadowmaps_color_texture", "fs_shadowmaps_color_texture"); + + // Blur. + m_vBlur[PackDepth::RGBA] = loadProgram("vs_shadowmaps_vblur", "fs_shadowmaps_vblur"); + m_hBlur[PackDepth::RGBA] = loadProgram("vs_shadowmaps_hblur", "fs_shadowmaps_hblur"); + m_vBlur[PackDepth::VSM] = loadProgram("vs_shadowmaps_vblur", "fs_shadowmaps_vblur_vsm"); + m_hBlur[PackDepth::VSM] = loadProgram("vs_shadowmaps_hblur", "fs_shadowmaps_hblur_vsm"); + + // Draw depth. + m_drawDepth[PackDepth::RGBA] = loadProgram("vs_shadowmaps_unpackdepth", "fs_shadowmaps_unpackdepth"); + m_drawDepth[PackDepth::VSM] = loadProgram("vs_shadowmaps_unpackdepth", "fs_shadowmaps_unpackdepth_vsm"); + + // Pack depth. + m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] = loadProgram("vs_shadowmaps_packdepth", "fs_shadowmaps_packdepth"); + m_packDepth[DepthImpl::InvZ][PackDepth::VSM] = loadProgram("vs_shadowmaps_packdepth", "fs_shadowmaps_packdepth_vsm"); + + m_packDepth[DepthImpl::Linear][PackDepth::RGBA] = loadProgram("vs_shadowmaps_packdepth_linear", "fs_shadowmaps_packdepth_linear"); + m_packDepth[DepthImpl::Linear][PackDepth::VSM] = loadProgram("vs_shadowmaps_packdepth_linear", "fs_shadowmaps_packdepth_vsm_linear"); + + // Color lightning. + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_hard"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_pcf"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_vsm"); + m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning", "fs_shadowmaps_color_lightning_esm"); + + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_hard_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_pcf_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_vsm_linear"); + m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear", "fs_shadowmaps_color_lightning_esm_linear"); + + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_hard_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_pcf_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_vsm_omni"); + m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_omni", "fs_shadowmaps_color_lightning_esm_omni"); + + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_hard_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_pcf_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_vsm_linear_omni"); + m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear_omni", "fs_shadowmaps_color_lightning_esm_linear_omni"); + + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_hard_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_pcf_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_vsm_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_csm", "fs_shadowmaps_color_lightning_esm_csm"); + + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_hard_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_pcf_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_vsm_linear_csm"); + m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] = loadProgram("vs_shadowmaps_color_lightning_linear_csm", "fs_shadowmaps_color_lightning_esm_linear_csm"); + } + + void destroy() + { + // Color lightning. + for (uint8_t ii = 0; ii < SmType::Count; ++ii) + { + for (uint8_t jj = 0; jj < DepthImpl::Count; ++jj) + { + for (uint8_t kk = 0; kk < SmImpl::Count; ++kk) + { + bgfx::destroyProgram(m_colorLightning[ii][jj][kk]); + } + } + } + + // Pack depth. + for (uint8_t ii = 0; ii < DepthImpl::Count; ++ii) + { + for (uint8_t jj = 0; jj < PackDepth::Count; ++jj) + { + bgfx::destroyProgram(m_packDepth[ii][jj]); + } + } + + // Draw depth. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_drawDepth[ii]); + } + + // Hblur. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_hBlur[ii]); + } + + // Vblur. + for (uint8_t ii = 0; ii < PackDepth::Count; ++ii) + { + bgfx::destroyProgram(m_vBlur[ii]); + } + + // Misc. + bgfx::destroyProgram(m_colorTexture); + bgfx::destroyProgram(m_texture); + bgfx::destroyProgram(m_black); + } + + bgfx::ProgramHandle m_black; + bgfx::ProgramHandle m_texture; + bgfx::ProgramHandle m_colorTexture; + bgfx::ProgramHandle m_vBlur[PackDepth::Count]; + bgfx::ProgramHandle m_hBlur[PackDepth::Count]; + bgfx::ProgramHandle m_drawDepth[PackDepth::Count]; + bgfx::ProgramHandle m_packDepth[DepthImpl::Count][PackDepth::Count]; + bgfx::ProgramHandle m_colorLightning[SmType::Count][DepthImpl::Count][SmImpl::Count]; +}; + +static Programs s_programs; + +struct ShadowMapSettings +{ +#define IMGUI_FLOAT_PARAM(_name) float _name, _name##Min, _name##Max, _name##Step + IMGUI_FLOAT_PARAM(m_sizePwrTwo); + IMGUI_FLOAT_PARAM(m_depthValuePow); + IMGUI_FLOAT_PARAM(m_near); + IMGUI_FLOAT_PARAM(m_far); + IMGUI_FLOAT_PARAM(m_bias); + IMGUI_FLOAT_PARAM(m_normalOffset); + IMGUI_FLOAT_PARAM(m_customParam0); + IMGUI_FLOAT_PARAM(m_customParam1); + IMGUI_FLOAT_PARAM(m_xNum); + IMGUI_FLOAT_PARAM(m_yNum); + IMGUI_FLOAT_PARAM(m_xOffset); + IMGUI_FLOAT_PARAM(m_yOffset); + bool m_doBlur; + bgfx::ProgramHandle* m_progPack; + bgfx::ProgramHandle* m_progDraw; +#undef IMGUI_FLOAT_PARAM +}; + +int _main_(int /*_argc*/, char** /*_argv*/) +{ + uint32_t debug = BGFX_DEBUG_TEXT; + uint32_t reset = BGFX_RESET_VSYNC; + + ViewState viewState(1280, 720); + ClearValues clearValues(0x00000000, 1.0f, 0); + + bgfx::init(); + bgfx::reset(viewState.m_width, viewState.m_height, reset); + + // Enable debug text. + bgfx::setDebug(debug); + + // Setup root path for binary shaders. Shader binaries are different + // for each renderer. + switch (bgfx::getRendererType() ) + { + default: + case bgfx::RendererType::Direct3D9: + s_shaderPath = "shaders/dx9/"; + s_texelHalf = 0.5f; + 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: + case bgfx::RendererType::OpenGLES3: + s_shaderPath = "shaders/gles/"; + s_flipV = true; + break; + } + + // Imgui. + FILE* file = fopen("font/droidsans.ttf", "rb"); + uint32_t size = (uint32_t)fsize(file); + void* data = malloc(size); + size_t ignore = fread(data, 1, size, file); + BX_UNUSED(ignore); + fclose(file); + imguiCreate(data, size); + + // Uniforms. + s_uniforms.init(); + u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv); + u_shadowMap[0] = bgfx::createUniform("u_shadowMap0", bgfx::UniformType::Uniform1iv); + u_shadowMap[1] = bgfx::createUniform("u_shadowMap1", bgfx::UniformType::Uniform1iv); + u_shadowMap[2] = bgfx::createUniform("u_shadowMap2", bgfx::UniformType::Uniform1iv); + u_shadowMap[3] = bgfx::createUniform("u_shadowMap3", bgfx::UniformType::Uniform1iv); + + // Programs. + s_programs.init(); + + // Vertex declarations. + bgfx::VertexDecl PosNormalTexcoordDecl; + PosNormalTexcoordDecl.begin(); + PosNormalTexcoordDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + PosNormalTexcoordDecl.add(bgfx::Attrib::Normal, 4, bgfx::AttribType::Uint8, true, true); + PosNormalTexcoordDecl.add(bgfx::Attrib::TexCoord0, 2, bgfx::AttribType::Float); + PosNormalTexcoordDecl.end(); + + bgfx::VertexDecl posDecl; + posDecl.begin(); + posDecl.add(bgfx::Attrib::Position, 3, bgfx::AttribType::Float); + posDecl.end(); + + PosColorTexCoord0Vertex::init(); + + // Textures. + const bgfx::Memory* mem; + + mem = loadTexture("figure-rgba.dds"); + bgfx::TextureHandle texFigure = bgfx::createTexture(mem); + + mem = loadTexture("flare.dds"); + bgfx::TextureHandle texFlare = bgfx::createTexture(mem); + + mem = loadTexture("fieldstone-rgba.dds"); + bgfx::TextureHandle texFieldstone = bgfx::createTexture(mem); + + // Meshes. + Mesh bunnyMesh; + Mesh treeMesh; + Mesh cubeMesh; + Mesh hollowcubeMesh; + Mesh hplaneMesh; + Mesh vplaneMesh; + bunnyMesh.load("meshes/bunny.bin"); + treeMesh.load("meshes/tree.bin"); + cubeMesh.load("meshes/cube.bin"); + hollowcubeMesh.load("meshes/hollowcube.bin"); + hplaneMesh.load(s_hplaneVertices, s_numHPlaneVertices, PosNormalTexcoordDecl, s_planeIndices, s_numPlaneIndices); + vplaneMesh.load(s_vplaneVertices, s_numVPlaneVertices, PosNormalTexcoordDecl, s_planeIndices, s_numPlaneIndices); + + // Materials. + Material defaultMaterial = + { + {{ 1.0f, 1.0f, 1.0f, 0.0f }} //ambient + ,{{ 1.0f, 1.0f, 1.0f, 0.0f }} //diffuse + ,{{ 1.0f, 1.0f, 1.0f, 0.0f }} //specular, exponent + }; + + // Lights. + Light pointLight = + { + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //position + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //ambient + {{ 1.0f, 1.0f, 1.0f, 850.0f }}, //diffuse + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //specular + {{ 0.0f,-0.4f,-0.6f, 0.0f }}, //spotdirection, spotexponent + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 0.0f, 1.0f, 91.0f }}, //attenuation, spotcutoff + }; + + Light directionalLight = + { + {{ 0.5f,-1.0f, 0.1f, 0.0f }}, //position + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 1.0f, 1.0f, 1.0f, 0.02f }}, //ambient + {{ 1.0f, 1.0f, 1.0f, 0.4f }}, //diffuse + {{ 1.0f, 1.0f, 1.0f, 0.0f }}, //specular + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //spotdirection, spotexponent + { 0.0f, 0.0f, 0.0f, 0.0f }, //-ignore + {{ 0.0f, 0.0f, 0.0f, 1.0f }}, //attenuation, spotcutoff + }; + + // Setup uniforms. + float color[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; + float lightMtx[16]; + float shadowMapMtx[ShadowMapRenderTargets::Count][16]; + s_uniforms.setPtrs(&defaultMaterial + , &pointLight + , color + , lightMtx + , &shadowMapMtx[ShadowMapRenderTargets::First][0] + , &shadowMapMtx[ShadowMapRenderTargets::Second][0] + , &shadowMapMtx[ShadowMapRenderTargets::Third][0] + , &shadowMapMtx[ShadowMapRenderTargets::Fourth][0] + ); + s_uniforms.submitConstUniforms(); + + // Settings. + ShadowMapSettings smSettings[LightType::Count][DepthImpl::Count][SmImpl::Count] = + { + { //LightType::Spot + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 8.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.045f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 450.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 3.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.02f, 0.0f, 0.3f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.0012f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0025f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 2000.0f, 1.0f, 2000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0 + , 300.0f, 1.0f, 1500.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 10.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0055f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Single][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + + }, + { //LightType::Point + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 50.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 8.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.055f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 450.0f, 1.0f, 900.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 10.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 3.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.035f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.003f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0035f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 120.0f, 1.0f, 300.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.001f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.006f, 0.0f, 0.1f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.1f, 0.00001f // m_customParam0 + , 400.0f, 1.0f, 900.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 12.0f, 9.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 250.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.007f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.05f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 8000.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.25f, 0.0f, 2.0f, 0.001f // m_xOffset + , 0.25f, 0.0f, 2.0f, 0.001f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Omni][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + + }, + { //LightType::Directional + + { //DepthImpl::InvZ + + { //SmImpl::Hard + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::InvZ][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::InvZ][SmImpl::ESM] //m_progDraw + } + + }, + { //DepthImpl::Linear + + { //SmImpl::Hard + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 500.0f, 1.0f, 1000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::Hard] //m_progDraw + }, + { //SmImpl::PCF + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 99.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.0012f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 200.0f, 1.0f, 400.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 8.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 8.0f, 1.0f // m_yNum + , 1.0f, 0.0f, 3.0f, 0.01f // m_xOffset + , 1.0f, 0.0f, 3.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::PCF] //m_progDraw + }, + { //SmImpl::VSM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 1.0f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.02f, 0.0f, 0.04f, 0.00001f // m_customParam0 + , 2500.0f, 1.0f, 5000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::VSM] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::VSM] //m_progDraw + }, + { //SmImpl::ESM + 11.0f, 7.0f, 12.0f, 1.0f // m_sizePwrTwo + , 1.0f, 1.0f, 20.0f, 1.0f // m_depthValuePow + , 1.0f, 1.0f, 10.0f, 0.01f // m_near + , 550.0f, 100.0f, 2000.0f, 50.0f // m_far + , 0.004f, 0.0f, 0.01f, 0.00001f // m_bias + , 0.001f, 0.0f, 0.04f, 0.00001f // m_normalOffset + , 0.7f, 0.0f, 1.0f, 0.01f // m_customParam0 + , 9500.0f, 1.0f, 15000.0f, 1.0f // m_customParam1 + , 2.0f, 0.0f, 4.0f, 1.0f // m_xNum + , 2.0f, 0.0f, 4.0f, 1.0f // m_yNum + , 0.2f, 0.0f, 1.0f, 0.01f // m_xOffset + , 0.2f, 0.0f, 1.0f, 0.01f // m_yOffset + , true // m_doBlur + , &s_programs.m_packDepth[DepthImpl::Linear][PackDepth::RGBA] //m_progPack + , &s_programs.m_colorLightning[SmType::Cascade][DepthImpl::Linear][SmImpl::ESM] //m_progDraw + } + + } + } + }; + + struct SceneSettings + { + LightType::Enum m_lightType; + DepthImpl::Enum m_depthImpl; + SmImpl::Enum m_smImpl; + float m_spotOuterAngle; + float m_spotInnerAngle; + float m_fovXAdjust; + float m_fovYAdjust; + float m_coverageSpotL; + float m_numSplitsf; + float m_splitDistribution; + uint8_t m_numSplits; + bool m_updateLights; + bool m_updateScene; + bool m_drawDepthBuffer; + bool m_showSmCoverage; + bool m_stencilPack; + bool m_stabilize; + }; + + SceneSettings settings; + settings.m_lightType = LightType::SpotLight; + settings.m_depthImpl = DepthImpl::InvZ; + settings.m_smImpl = SmImpl::Hard; + settings.m_spotOuterAngle = 45.0f; + settings.m_spotInnerAngle = 30.0f; + settings.m_fovXAdjust = 0.0f; + settings.m_fovYAdjust = 0.0f; + settings.m_coverageSpotL = 90.0f; + settings.m_numSplitsf = 4.0f; + settings.m_splitDistribution = 0.6f; + settings.m_numSplits = uint8_t(settings.m_numSplitsf); + settings.m_updateLights = true; + settings.m_updateScene = true; + settings.m_drawDepthBuffer = false; + settings.m_showSmCoverage = false; + settings.m_stencilPack = true; + settings.m_stabilize = true; + + ShadowMapSettings* currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + // Render targets. + uint16_t shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo); + uint16_t currentShadowMapSize = shadowMapSize; + float currentShadowMapSizef = float(int16_t(currentShadowMapSize) ); + s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef; + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + s_rtShadowMap[ii] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + } + s_rtBlur = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8); + + // Setup camera. + float initialPos[3] = { 0.0f, 60.0f, -105.0f }; + cameraSetPosition(initialPos); + cameraSetVerticalAngle(-0.45f); + + // Set view and projection matrices. + const float camFovy = 60.0f; + const float camAspect = float(int32_t(viewState.m_width) ) / float(int32_t(viewState.m_height) ); + const float camNear = 0.1f; + const float camFar = 2000.0f; + const float projHeight = 1.0f/tanf(camFovy*( (float)M_PI/180.0f)*0.5f); + const float projWidth = projHeight * 1.0f/camAspect; + mtxProj(viewState.m_proj, camFovy, camAspect, camNear, camFar); + cameraGetViewMtx(viewState.m_view); + + float timeAccumulatorLight = 0.0f; + float timeAccumulatorScene = 0.0f; + + entry::MouseState mouseState; + while (!entry::processEvents(viewState.m_width, viewState.m_height, debug, reset, &mouseState) ) + { + // Imgui. + imguiBeginFrame(mouseState.m_mx + , mouseState.m_my + , (mouseState.m_buttons[entry::MouseButton::Left ] ? IMGUI_MBUT_LEFT : 0) + | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) + , 0 + , viewState.m_width + , viewState.m_height + ); + + static int32_t rightScrollArea = 0; + imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 660, &rightScrollArea); +#define IMGUI_FLOAT_SLIDER(_name, _val) \ + imguiSlider(_name \ + , &_val \ + , *(((float*)&_val)+1) \ + , *(((float*)&_val)+2) \ + , *(((float*)&_val)+3) \ + ) + + imguiBool("Update lights", settings.m_updateLights); + imguiBool("Update scene", settings.m_updateScene); + + imguiSeparatorLine(); + imguiLabel("Shadow map depth:"); + imguiEnum(settings.m_depthImpl); + currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + imguiSeparator(); + imguiBool("Draw depth buffer.", settings.m_drawDepthBuffer); + if (settings.m_drawDepthBuffer) + { + IMGUI_FLOAT_SLIDER("Depth value pow:", currentSmSettings->m_depthValuePow); + } + + imguiSeparatorLine(); + imguiLabel("Shadow Map implementation:"); + imguiEnum(settings.m_smImpl); + currentSmSettings = &smSettings[settings.m_lightType][settings.m_depthImpl][settings.m_smImpl]; + + imguiSeparator(); + IMGUI_FLOAT_SLIDER("Bias:", currentSmSettings->m_bias); + IMGUI_FLOAT_SLIDER("Normal offset:", currentSmSettings->m_normalOffset); + imguiSeparator(); + if (LightType::DirectionalLight != settings.m_lightType) + { + IMGUI_FLOAT_SLIDER("Near plane:", currentSmSettings->m_near); + } + IMGUI_FLOAT_SLIDER("Far plane:", currentSmSettings->m_far); + + imguiSeparator(); + switch(settings.m_smImpl) + { + case SmImpl::Hard: + //imguiLabel("Hard"); + break; + case SmImpl::PCF: + imguiLabel("PCF"); + IMGUI_FLOAT_SLIDER("X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Y Offset:", currentSmSettings->m_yOffset); + break; + case SmImpl::VSM: + imguiLabel("VSM"); + IMGUI_FLOAT_SLIDER("Min variance", currentSmSettings->m_customParam0); + IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1); + imguiBool("Blur shadow map", currentSmSettings->m_doBlur); + if (currentSmSettings->m_doBlur) + { + IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset); + } + break; + case SmImpl::ESM: + imguiLabel("ESM"); + IMGUI_FLOAT_SLIDER("ESM Hardness", currentSmSettings->m_customParam0); + IMGUI_FLOAT_SLIDER("Depth multiplier", currentSmSettings->m_customParam1); + imguiBool("Blur shadow map", currentSmSettings->m_doBlur); + if (currentSmSettings->m_doBlur) + { + IMGUI_FLOAT_SLIDER("Blur X Offset:", currentSmSettings->m_xOffset); + IMGUI_FLOAT_SLIDER("Blur Y Offset:", currentSmSettings->m_yOffset); + } + break; + + case SmImpl::Count: + default: + break; + }; + + imguiEndScrollArea(); + + static int32_t leftScrollArea = 0; + imguiBeginScrollArea("Light", 10, 70, 256, 334, &leftScrollArea); + + const LightType::Enum ltBefore = settings.m_lightType; + imguiEnum(settings.m_lightType); + const LightType::Enum ltAfter = settings.m_lightType; + const bool bLtChanged = (ltAfter != ltBefore); + + imguiSeparator(); + imguiBool("Show shadow map coverage.", settings.m_showSmCoverage); + + imguiSeparator(); + imguiLabel("Shadow map resolution: %ux%u", currentShadowMapSize, currentShadowMapSize); + IMGUI_FLOAT_SLIDER(" ", currentSmSettings->m_sizePwrTwo); + + imguiSeparatorLine(); + if (LightType::SpotLight == settings.m_lightType) + { + imguiLabel("Spot light"); + imguiSlider("Shadow map area:", &settings.m_coverageSpotL, 45.0f, 120.0f, 1.0f); + + imguiSeparator(); + imguiSlider("Spot outer cone:", &settings.m_spotOuterAngle, 0.0f, 91.0f, 0.1f); + imguiSlider("Spot inner cone:", &settings.m_spotInnerAngle, 0.0f, 90.0f, 0.1f); + } + else if (LightType::PointLight == settings.m_lightType) + { + imguiLabel("Point light"); + imguiBool("Stencil pack", settings.m_stencilPack); + + imguiSlider("Fov X adjust:", &settings.m_fovXAdjust, -20.0f, 20.0f, 0.0001f); + imguiSlider("Fov Y adjust:", &settings.m_fovYAdjust, -20.0f, 20.0f, 0.0001f); + } + else if (LightType::DirectionalLight == settings.m_lightType) + { + imguiLabel("Directional light"); + imguiBool("Stabilize cascades", settings.m_stabilize); + imguiSlider("Cascade splits:", &settings.m_numSplitsf, 1.0f, 4.0f, 1.0f); + imguiSlider("Cascade distribution:", &settings.m_splitDistribution, 0.0f, 1.0f, 0.001f); + settings.m_numSplits = uint8_t(settings.m_numSplitsf); + } + +#undef IMGUI_FLOAT_SLIDER + imguiEndScrollArea(); + imguiEndFrame(); + + // Update uniforms. + s_uniforms.m_shadowMapBias = currentSmSettings->m_bias; + s_uniforms.m_shadowMapOffset = currentSmSettings->m_normalOffset; + s_uniforms.m_shadowMapParam0 = currentSmSettings->m_customParam0; + s_uniforms.m_shadowMapParam1 = currentSmSettings->m_customParam1; + s_uniforms.m_depthValuePow = currentSmSettings->m_depthValuePow; + s_uniforms.m_XNum = currentSmSettings->m_xNum; + s_uniforms.m_YNum = currentSmSettings->m_yNum; + s_uniforms.m_XOffset = currentSmSettings->m_xOffset; + s_uniforms.m_YOffset = currentSmSettings->m_yOffset; + s_uniforms.m_showSmCoverage = float(settings.m_showSmCoverage); + s_uniforms.m_lightPtr = (LightType::DirectionalLight == settings.m_lightType) ? &directionalLight : &pointLight; + + if (LightType::SpotLight == settings.m_lightType) + { + pointLight.m_attenuationSpotOuter.m_outer = settings.m_spotOuterAngle; + pointLight.m_spotDirectionInner.m_inner = settings.m_spotInnerAngle; + } + else + { + pointLight.m_attenuationSpotOuter.m_outer = 91.0f; //above 90.0f means point light + } + + s_uniforms.submitPerFrameUniforms(); + + // Time. + 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; + const float deltaTime = float(frameTime/freq); + + // Use debug font to print information about this example. + bgfx::dbgTextClear(); + bgfx::dbgTextPrintf(0, 1, 0x4f, "bgfx/examples/16-shadowmaps"); + bgfx::dbgTextPrintf(0, 2, 0x6f, "Description: Shadow maps example."); + bgfx::dbgTextPrintf(0, 3, 0x0f, "Frame: % 7.3f[ms]", double(frameTime)*toMs); + + // Update camera. + cameraUpdate(deltaTime); + + // Update view mtx. + cameraGetViewMtx(viewState.m_view); + + // Update lights. + pointLight.computeViewSpaceComponents(viewState.m_view); + directionalLight.computeViewSpaceComponents(viewState.m_view); + + // Update time accumulators. + if (settings.m_updateLights) { timeAccumulatorLight += deltaTime; } + if (settings.m_updateScene) { timeAccumulatorScene += deltaTime; } + + // Setup lights. + pointLight.m_position.m_x = cos(timeAccumulatorLight) * 20.0f; + pointLight.m_position.m_y = 26.0f; + pointLight.m_position.m_z = sin(timeAccumulatorLight) * 20.0f; + pointLight.m_spotDirectionInner.m_x = -pointLight.m_position.m_x; + pointLight.m_spotDirectionInner.m_y = -pointLight.m_position.m_y; + pointLight.m_spotDirectionInner.m_z = -pointLight.m_position.m_z; + + directionalLight.m_position.m_x = -cos(timeAccumulatorLight); + directionalLight.m_position.m_y = -1.0f; + directionalLight.m_position.m_z = -sin(timeAccumulatorLight); + + // Setup instance matrices. + float mtxFloor[16]; + const float floorScale = 550.0f; + mtxScaleRotateTranslate(mtxFloor + , floorScale //scaleX + , floorScale //scaleY + , floorScale //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , 0.0f //translateY + , 0.0f //translateZ + ); + + float mtxBunny[16]; + mtxScaleRotateTranslate(mtxBunny + , 5.0f + , 5.0f + , 5.0f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 15.0f + , 5.0f + , 0.0f + ); + + float mtxHollowcube[16]; + mtxScaleRotateTranslate(mtxHollowcube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , 0.0f + , 10.0f + , 0.0f + ); + + float mtxCube[16]; + mtxScaleRotateTranslate(mtxCube + , 2.5f + , 2.5f + , 2.5f + , 0.0f + , 1.56f - timeAccumulatorScene + , 0.0f + , -15.0f + , 5.0f + , 0.0f + ); + + const uint8_t numTrees = 10; + float mtxTrees[numTrees][16]; + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + mtxScaleRotateTranslate(mtxTrees[ii] + , 2.0f + , 2.0f + , 2.0f + , 0.0f + , float(ii) + , 0.0f + , sin(float(ii)*2.0f*float(M_PI)/float(numTrees) ) * 60.0f + , 0.0f + , cos(float(ii)*2.0f*float(M_PI)/float(numTrees) ) * 60.0f + ); + } + + // Compute transform matrices. + const uint8_t shadowMapPasses = ShadowMapRenderTargets::Count; + float lightView[shadowMapPasses][16]; + float lightProj[shadowMapPasses][16]; + float mtxYpr[TetrahedronFaces::Count][16]; + + float screenProj[16]; + float screenView[16]; + mtxIdentity(screenView); + mtxOrtho(screenProj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f); + + if (LightType::SpotLight == settings.m_lightType) + { + const float fovy = settings.m_coverageSpotL; + const float aspect = 1.0f; + mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far); + + //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far; + lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far; + } + + float at[3]; + vec3Add(at, pointLight.m_position.m_v, pointLight.m_spotDirectionInner.m_v); + mtxLookAt(lightView[TetrahedronFaces::Green], pointLight.m_position.m_v, at); + } + else if (LightType::PointLight == settings.m_lightType) + { + float ypr[TetrahedronFaces::Count][3] = + { + { toRad( 0.0f), toRad( 27.36780516f), toRad(0.0f) } + ,{ toRad(180.0f), toRad( 27.36780516f), toRad(0.0f) } + ,{ toRad(-90.0f), toRad(-27.36780516f), toRad(0.0f) } + ,{ toRad( 90.0f), toRad(-27.36780516f), toRad(0.0f) } + }; + + + if (settings.m_stencilPack) + { + const float fovx = 143.98570868f + 3.51f + settings.m_fovXAdjust; + const float fovy = 125.26438968f + 9.85f + settings.m_fovYAdjust; + const float aspect = tanf(toRad(fovx*0.5f) )/tanf(toRad(fovy*0.5f) ); + + mtxProj(lightProj[ProjType::Vertical] + , fovx + , aspect + , currentSmSettings->m_near + , currentSmSettings->m_far + ); + + //For linear depth, prevent depth division by variable w-component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Vertical][10] /= currentSmSettings->m_far; + lightProj[ProjType::Vertical][14] /= currentSmSettings->m_far; + } + + ypr[TetrahedronFaces::Green][2] = toRad(180.0f); + ypr[TetrahedronFaces::Yellow][2] = toRad( 0.0f); + ypr[TetrahedronFaces::Blue][2] = toRad( 90.0f); + ypr[TetrahedronFaces::Red][2] = toRad(-90.0f); + } + + const float fovx = 143.98570868f + 7.8f + settings.m_fovXAdjust; + const float fovy = 125.26438968f + 3.0f + settings.m_fovYAdjust; + const float aspect = tanf(toRad(fovx*0.5f) )/tanf(toRad(fovy*0.5f) ); + + mtxProj(lightProj[ProjType::Horizontal], fovy, aspect, currentSmSettings->m_near, currentSmSettings->m_far); + + //For linear depth, prevent depth division by variable w component in shaders and divide here by far plane + if (DepthImpl::Linear == settings.m_depthImpl) + { + lightProj[ProjType::Horizontal][10] /= currentSmSettings->m_far; + lightProj[ProjType::Horizontal][14] /= currentSmSettings->m_far; + } + + + for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii) + { + float mtxTmp[16]; + mtxYawPitchRoll(mtxTmp, ypr[ii][0], ypr[ii][1], ypr[ii][2]); + + float tmp[3] = + { + -vec3Dot(pointLight.m_position.m_v, &mtxTmp[0]) + , -vec3Dot(pointLight.m_position.m_v, &mtxTmp[4]) + , -vec3Dot(pointLight.m_position.m_v, &mtxTmp[8]) + }; + + mtxTranspose(mtxYpr[ii], mtxTmp); + + memcpy(lightView[ii], mtxYpr[ii], 12*sizeof(float) ); + lightView[ii][12] = tmp[0]; + lightView[ii][13] = tmp[1]; + lightView[ii][14] = tmp[2]; + lightView[ii][15] = 1.0f; + } + } + else // LightType::DirectionalLight == settings.m_lightType + { + // Setup light view mtx. + float eye[3] = + { + -directionalLight.m_position.m_x + , -directionalLight.m_position.m_y + , -directionalLight.m_position.m_z + }; + float at[3] = { 0.0f, 0.0f, 0.0f }; + mtxLookAt(lightView[0], eye, at); + + // Compute camera inverse view mtx. + float mtxViewInv[16]; + mtxInverse(mtxViewInv, viewState.m_view); + + // Compute split distances. + const uint8_t maxNumSplits = 4; + BX_CHECK(maxNumSplits >= settings.m_numSplits, "Error! Max num splits."); + + float splitSlices[maxNumSplits*2]; + splitFrustum(splitSlices, settings.m_numSplits, currentSmSettings->m_near, currentSmSettings->m_far, settings.m_splitDistribution); + + // Update uniforms. + for (uint8_t ii = 0, ff = 1; ii < settings.m_numSplits; ++ii, ff+=2) + { + // This lags for 1 frame, but it's not a problem. + s_uniforms.m_csmFarDistances[ii] = splitSlices[ff]; + } + + float mtxProj[16]; + mtxOrtho(mtxProj, 1.0f, -1.0f, 1.0f, -1.0f, -currentSmSettings->m_far, currentSmSettings->m_far); + + const uint8_t numCorners = 8; + float frustumCorners[maxNumSplits][numCorners][3]; + for (uint8_t ii = 0, nn = 0, ff = 1; ii < settings.m_numSplits; ++ii, nn+=2, ff+=2) + { + // Compute frustum corners for one split in world space. + worldSpaceFrustumCorners( (float*)frustumCorners[ii], splitSlices[nn], splitSlices[ff], projWidth, projHeight, mtxViewInv); + + float min[3] = { 9000.0f, 9000.0f, 9000.0f }; + float max[3] = { -9000.0f, -9000.0f, -9000.0f }; + + for (uint8_t jj = 0; jj < numCorners; ++jj) + { + // Transform to light space. + float lightSpaceFrustumCorner[3]; + vec3MulMtx(lightSpaceFrustumCorner, frustumCorners[ii][jj], lightView[0]); + + // Update bounding box. + min[0] = fminf(min[0], lightSpaceFrustumCorner[0]); + max[0] = fmaxf(max[0], lightSpaceFrustumCorner[0]); + min[1] = fminf(min[1], lightSpaceFrustumCorner[1]); + max[1] = fmaxf(max[1], lightSpaceFrustumCorner[1]); + min[2] = fminf(min[2], lightSpaceFrustumCorner[2]); + max[2] = fmaxf(max[2], lightSpaceFrustumCorner[2]); + } + + float minproj[3]; + float maxproj[3]; + vec3MulMtxH(minproj, min, mtxProj); + vec3MulMtxH(maxproj, max, mtxProj); + + float offsetx, offsety; + float scalex, scaley; + + scalex = 2.0f / (maxproj[0] - minproj[0]); + scaley = 2.0f / (maxproj[1] - minproj[1]); + + if (settings.m_stabilize) + { + const float quantizer = 64.0f; + scalex = quantizer / ceilf(quantizer / scalex); + scaley = quantizer / ceilf(quantizer / scaley); + } + + offsetx = 0.5f * (maxproj[0] + minproj[0]) * scalex; + offsety = 0.5f * (maxproj[1] + minproj[1]) * scaley; + + if (settings.m_stabilize) + { + const float halfSize = currentShadowMapSizef * 0.5f; + offsetx = ceilf(offsetx * halfSize) / halfSize; + offsety = ceilf(offsety * halfSize) / halfSize; + } + + float mtxCrop[16]; + mtxIdentity(mtxCrop); + mtxCrop[ 0] = scalex; + mtxCrop[ 5] = scaley; + mtxCrop[12] = offsetx; + mtxCrop[13] = offsety; + + mtxMul(lightProj[ii], mtxCrop, mtxProj); + } + } + + // Reset render targets. + const uint32_t viewMask = (uint32_t(1) << (RENDER_PASS_18+1) ) - 1; + const bgfx::RenderTargetHandle invalidRt = BGFX_INVALID_HANDLE; + bgfx::setViewRenderTargetMask(viewMask, invalidRt); + + // Determine on-screen rectangle size where depth buffer will be drawn. + const uint16_t depthRectHeight = uint16_t(float(viewState.m_height) / 2.5f); + const uint16_t depthRectWidth = depthRectHeight; + const uint16_t depthRectX = 0; + const uint16_t depthRectY = viewState.m_height - depthRectHeight; + + // Setup views and render targets. + bgfx::setViewRect(0, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewTransform(0, viewState.m_view, viewState.m_proj); + + if (LightType::SpotLight == settings.m_lightType) + { + /** + * RENDER_PASS_0 - Clear shadow map. (used as convenience, otherwise render_pass_1 could be cleared) + * RENDER_PASS_1 - Craft shadow map. + * RENDER_PASS_5 - Vertical blur. + * RENDER_PASS_6 - Horizontal blur. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer. + */ + + bgfx::setViewRect(RENDER_PASS_0, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_1, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX, depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_0, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_1, lightView[0], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); + } + else if (LightType::PointLight == settings.m_lightType) + { + /** + * RENDER_PASS_0 - Clear entire shadow map. + * RENDER_PASS_1 - Craft green tetrahedron shadow face. + * RENDER_PASS_2 - Craft yellow tetrahedron shadow face. + * RENDER_PASS_3 - Craft blue tetrahedron shadow face. + * RENDER_PASS_4 - Craft red tetrahedron shadow face. + * RENDER_PASS_5 - Vertical blur. + * RENDER_PASS_6 - Horizontal blur. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer. + */ + + bgfx::setViewRect(RENDER_PASS_0, 0, 0, currentShadowMapSize, currentShadowMapSize); + if (settings.m_stencilPack) + { + const uint16_t f = currentShadowMapSize; //full size + const uint16_t h = currentShadowMapSize/2; //half size + bgfx::setViewRect(RENDER_PASS_1, 0, 0, f, h); + bgfx::setViewRect(RENDER_PASS_2, 0, h, f, h); + bgfx::setViewRect(RENDER_PASS_3, 0, 0, h, f); + bgfx::setViewRect(RENDER_PASS_4, h, 0, h, f); + } + else + { + const uint16_t h = currentShadowMapSize/2; //half size + bgfx::setViewRect(RENDER_PASS_1, 0, 0, h, h); + bgfx::setViewRect(RENDER_PASS_2, h, 0, h, h); + bgfx::setViewRect(RENDER_PASS_3, 0, h, h, h); + bgfx::setViewRect(RENDER_PASS_4, h, h, h, h); + } + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX, depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_0, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_1, lightView[TetrahedronFaces::Green], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_2, lightView[TetrahedronFaces::Yellow], lightProj[ProjType::Horizontal]); + if(settings.m_stencilPack) + { + bgfx::setViewTransform(RENDER_PASS_3, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Vertical]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[TetrahedronFaces::Red], lightProj[ProjType::Vertical]); + } + else + { + bgfx::setViewTransform(RENDER_PASS_3, lightView[TetrahedronFaces::Blue], lightProj[ProjType::Horizontal]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[TetrahedronFaces::Red], lightProj[ProjType::Horizontal]); + } + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_0, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_2, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_3, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_4, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); + } + else // LightType::DirectionalLight == settings.m_lightType + { + /** + * RENDER_PASS_1 - Craft shadow map for first split. + * RENDER_PASS_2 - Craft shadow map for second split. + * RENDER_PASS_3 - Craft shadow map for third split. + * RENDER_PASS_4 - Craft shadow map for fourth split. + * RENDER_PASS_5 - Vertical blur for first split. + * RENDER_PASS_6 - Horizontal blur for first split. + * RENDER_PASS_7 - Vertical blur for second split. + * RENDER_PASS_8 - Horizontal blur for second split. + * RENDER_PASS_9 - Vertical blur for third split. + * RENDER_PASS_10 - Horizontal blur for third split. + * RENDER_PASS_11 - Vertical blur for fourth split. + * RENDER_PASS_12 - Horizontal blur for fourth split. + * RENDER_PASS_13 - Draw scene. + * RENDER_PASS_14 - Draw floor bottom. + * RENDER_PASS_15 - Draw depth buffer for first split. + * RENDER_PASS_16 - Draw depth buffer for second split. + * RENDER_PASS_17 - Draw depth buffer for third split. + * RENDER_PASS_18 - Draw depth buffer for fourth split. + */ + + const uint16_t depthRectHeight = viewState.m_height / 3; + const uint16_t depthRectWidth = depthRectHeight; + const uint16_t depthRectX = 0; + const uint16_t depthRectY = viewState.m_height - depthRectHeight; + + bgfx::setViewRect(RENDER_PASS_1, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_2, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_3, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_4, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_5, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_6, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_7, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_8, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_9, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_10, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_11, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_12, 0, 0, currentShadowMapSize, currentShadowMapSize); + bgfx::setViewRect(RENDER_PASS_13, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_14, 0, 0, viewState.m_width, viewState.m_height); + bgfx::setViewRect(RENDER_PASS_15, depthRectX+(0*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_16, depthRectX+(1*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_17, depthRectX+(2*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + bgfx::setViewRect(RENDER_PASS_18, depthRectX+(3*depthRectWidth), depthRectY, depthRectWidth, depthRectHeight); + + bgfx::setViewTransform(RENDER_PASS_1, lightView[0], lightProj[0]); + bgfx::setViewTransform(RENDER_PASS_2, lightView[0], lightProj[1]); + bgfx::setViewTransform(RENDER_PASS_3, lightView[0], lightProj[2]); + bgfx::setViewTransform(RENDER_PASS_4, lightView[0], lightProj[3]); + bgfx::setViewTransform(RENDER_PASS_5, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_6, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_7, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_8, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_9, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_10, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_11, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_12, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_13, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_14, viewState.m_view, viewState.m_proj); + bgfx::setViewTransform(RENDER_PASS_15, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_16, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_17, screenView, screenProj); + bgfx::setViewTransform(RENDER_PASS_18, screenView, screenProj); + + bgfx::setViewRenderTarget(RENDER_PASS_1, s_rtShadowMap[0]); + bgfx::setViewRenderTarget(RENDER_PASS_2, s_rtShadowMap[1]); + bgfx::setViewRenderTarget(RENDER_PASS_3, s_rtShadowMap[2]); + bgfx::setViewRenderTarget(RENDER_PASS_4, s_rtShadowMap[3]); + bgfx::setViewRenderTarget(RENDER_PASS_5, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_6, s_rtShadowMap[0]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_7, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_8, s_rtShadowMap[1]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_9, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_10, s_rtShadowMap[2]); //hblur + bgfx::setViewRenderTarget(RENDER_PASS_11, s_rtBlur); //vblur + bgfx::setViewRenderTarget(RENDER_PASS_12, s_rtShadowMap[3]); //hblur + } + + // Clear backbuffer at beginning. + bgfx::setViewClear(0 + , BGFX_CLEAR_COLOR_BIT + | BGFX_CLEAR_DEPTH_BIT + , clearValues.m_clearRgba + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(0); + + // Clear shadowmap rendertarget at beginning. + const uint8_t flags0 = (LightType::DirectionalLight == settings.m_lightType) + ? 0 + : BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT | BGFX_CLEAR_STENCIL_BIT + ; + + bgfx::setViewClear(RENDER_PASS_0 + , flags0 + , 0xfefefefe //blur fails on completely white regions + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(RENDER_PASS_0); + + const uint8_t flags1 = (LightType::DirectionalLight == settings.m_lightType) + ? BGFX_CLEAR_COLOR_BIT | BGFX_CLEAR_DEPTH_BIT + : 0 + ; + + for (uint8_t ii = 0; ii < 4; ++ii) + { + bgfx::setViewClear(RENDER_PASS_1+ii + , flags1 + , 0xfefefefe //blur fails on completely white regions + , clearValues.m_clearDepth + , clearValues.m_clearStencil + ); + bgfx::submit(RENDER_PASS_1+ii); + } + + // Render. + + // Craft shadow map. + { + // Craft stencil mask for point light shadow map packing. + if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack) + { + if (bgfx::checkAvailTransientVertexBuffer(6, posDecl) ) + { + struct Pos + { + float m_x, m_y, m_z; + }; + + bgfx::TransientVertexBuffer vb; + bgfx::allocTransientVertexBuffer(&vb, 6, posDecl); + Pos* vertex = (Pos*)vb.data; + + const float min = 0.0f; + const float max = 1.0f; + const float center = 0.5f; + const float zz = 0.0f; + + vertex[0].m_x = min; + vertex[0].m_y = min; + vertex[0].m_z = zz; + + vertex[1].m_x = max; + vertex[1].m_y = min; + vertex[1].m_z = zz; + + vertex[2].m_x = center; + vertex[2].m_y = center; + vertex[2].m_z = zz; + + vertex[3].m_x = center; + vertex[3].m_y = center; + vertex[3].m_z = zz; + + vertex[4].m_x = max; + vertex[4].m_y = max; + vertex[4].m_z = zz; + + vertex[5].m_x = min; + vertex[5].m_y = max; + vertex[5].m_z = zz; + + bgfx::setProgram(s_programs.m_black); + bgfx::setState(0); + bgfx::setStencil(BGFX_STENCIL_TEST_ALWAYS + | BGFX_STENCIL_FUNC_REF(1) + | BGFX_STENCIL_FUNC_RMASK(0xff) + | BGFX_STENCIL_OP_FAIL_S_REPLACE + | BGFX_STENCIL_OP_FAIL_Z_REPLACE + | BGFX_STENCIL_OP_PASS_Z_REPLACE + ); + bgfx::setVertexBuffer(&vb); + bgfx::submit(RENDER_PASS_0); + } + } + + // Draw scene into shadowmap. + uint8_t drawNum; + if (LightType::SpotLight == settings.m_lightType) + { + drawNum = 1; + } + else if (LightType::PointLight == settings.m_lightType) + { + drawNum = 4; + } + else //LightType::DirectionalLight == settings.m_lightType) + { + drawNum = settings.m_numSplits; + } + + for (uint8_t ii = 0; ii < drawNum; ++ii) + { + const uint8_t viewId = RENDER_PASS_1 + ii; + + uint8_t renderStateIndex = RenderState::ShadowMap_PackDepth; + if(LightType::PointLight == settings.m_lightType && settings.m_stencilPack) + { + renderStateIndex = (ii < 2) ? RenderState::ShadowMap_PackDepthHoriz : RenderState::ShadowMap_PackDepthVert; + } + + // Floor. + hplaneMesh.submit(viewId + , mtxFloor + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Bunny. + bunnyMesh.submit(viewId + , mtxBunny + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Hollow cube. + hollowcubeMesh.submit(viewId + , mtxHollowcube + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Cube. + cubeMesh.submit(viewId + , mtxCube + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + + // Trees. + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + treeMesh.submit(viewId + , mtxTrees[ii] + , *currentSmSettings->m_progPack + , s_renderStates[renderStateIndex] + ); + } + } + } + + PackDepth::Enum depthType = (SmImpl::VSM == settings.m_smImpl) ? PackDepth::VSM : PackDepth::RGBA; + bool bVsmOrEsm = (SmImpl::VSM == settings.m_smImpl) || (SmImpl::ESM == settings.m_smImpl); + + // Blur shadow map. + if (bVsmOrEsm && currentSmSettings->m_doBlur) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); + bgfx::setProgram(s_programs.m_vBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_5); + + bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); + bgfx::setProgram(s_programs.m_hBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_6); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1, jj = 2; ii < settings.m_numSplits; ++ii, jj+=2) + { + const uint8_t viewId = RENDER_PASS_5 + jj; + + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); + bgfx::setProgram(s_programs.m_vBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(viewId); + + bgfx::setTexture(4, u_shadowMap[0], s_rtBlur); + bgfx::setProgram(s_programs.m_hBlur[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(viewId+1); + } + } + } + + // Draw scene. + { + // Setup shadow mtx. + float mtxShadow[16]; + + const float ymul = (s_flipV) ? 0.5f : -0.5f; + const float zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f; + + const float mtxBias[16] = + { + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, ymul, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.5f, zadd, 1.0f, + }; + + if (LightType::SpotLight == settings.m_lightType) + { + float mtxTmp[16]; + mtxMul(mtxTmp, lightProj[ProjType::Horizontal], mtxBias); + mtxMul(mtxShadow, lightView[0], mtxTmp); //lightViewProjBias + } + else if (LightType::PointLight == settings.m_lightType) + { + const float s = (s_flipV) ? 1.0f : -1.0f; //sign + const float zadd = (DepthImpl::Linear == settings.m_depthImpl) ? 0.0f : 0.5f; + + const float mtxCropBias[2][TetrahedronFaces::Count][16] = + { + { // settings.m_stencilPack == false + + { // D3D: Green, OGL: Blue + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.25f, zadd, 1.0f, + }, + { // D3D: Yellow, OGL: Red + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.25f, zadd, 1.0f, + }, + { // D3D: Blue, OGL: Green + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.75f, zadd, 1.0f, + }, + { // D3D: Red, OGL: Yellow + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.75f, zadd, 1.0f, + }, + }, + { // settings.m_stencilPack == true + + { // D3D: Red, OGL: Blue + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.25f, 0.5f, zadd, 1.0f, + }, + { // D3D: Blue, OGL: Red + 0.25f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.5f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.75f, 0.5f, zadd, 1.0f, + }, + { // D3D: Green, OGL: Green + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.75f, zadd, 1.0f, + }, + { // D3D: Yellow, OGL: Yellow + 0.5f, 0.0f, 0.0f, 0.0f, + 0.0f, s*0.25f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.5f, 0.0f, + 0.5f, 0.25f, zadd, 1.0f, + }, + } + }; + + //Use as: [stencilPack][flipV][tetrahedronFace] + static const uint8_t cropBiasIndices[2][2][4] = + { + { // settings.m_stencilPack == false + { 0, 1, 2, 3 }, //flipV == false + { 2, 3, 0, 1 }, //flipV == true + }, + { // settings.m_stencilPack == true + { 3, 2, 0, 1 }, //flipV == false + { 2, 3, 0, 1 }, //flipV == true + }, + }; + + for (uint8_t ii = 0; ii < TetrahedronFaces::Count; ++ii) + { + ProjType::Enum projType = (settings.m_stencilPack) ? ProjType::Enum(ii>1) : ProjType::Horizontal; + uint8_t biasIndex = cropBiasIndices[settings.m_stencilPack][uint8_t(s_flipV)][ii]; + + float mtxTmp[16]; + mtxMul(mtxTmp, mtxYpr[ii], lightProj[projType]); + mtxMul(shadowMapMtx[ii], mtxTmp, mtxCropBias[settings.m_stencilPack][biasIndex]); //mtxYprProjBias + } + + mtxTranslate(mtxShadow //lightInvTranslate + , -pointLight.m_position.m_v[0] + , -pointLight.m_position.m_v[1] + , -pointLight.m_position.m_v[2] + ); + } + else //LightType::DirectionalLight == settings.m_lightType + { + for (uint8_t ii = 0; ii < settings.m_numSplits; ++ii) + { + float mtxTmp[16]; + + mtxMul(mtxTmp, lightProj[ii], mtxBias); + mtxMul(shadowMapMtx[ii], lightView[0], mtxTmp); //lViewProjCropBias + } + } + + // Floor. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxFloor, mtxShadow); //not needed for directional light + } + hplaneMesh.submit(RENDER_PASS_13 + , mtxFloor + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Bunny. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxBunny, mtxShadow); + } + bunnyMesh.submit(RENDER_PASS_13 + , mtxBunny + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Hollow cube. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxHollowcube, mtxShadow); + } + hollowcubeMesh.submit(RENDER_PASS_13 + , mtxHollowcube + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Cube. + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxCube, mtxShadow); + } + cubeMesh.submit(RENDER_PASS_13 + , mtxCube + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + + // Trees. + for (uint8_t ii = 0; ii < numTrees; ++ii) + { + if (LightType::DirectionalLight != settings.m_lightType) + { + mtxMul(lightMtx, mtxTrees[ii], mtxShadow); + } + treeMesh.submit(RENDER_PASS_13 + , mtxTrees[ii] + , *currentSmSettings->m_progDraw + , s_renderStates[RenderState::Default] + ); + } + + // Lights. + if (LightType::SpotLight == settings.m_lightType || LightType::PointLight == settings.m_lightType) + { + const float lightScale[3] = { 1.5f, 1.5f, 1.5f }; + float mtx[16]; + mtxBillboard(mtx, viewState.m_view, pointLight.m_position.m_v, lightScale); + vplaneMesh.submit(RENDER_PASS_13 + , mtx + , s_programs.m_colorTexture + , s_renderStates[RenderState::Custom_BlendLightTexture] + , texFlare + ); + } + + // Draw floor bottom. + float floorBottomMtx[16]; + mtxScaleRotateTranslate(floorBottomMtx + , floorScale //scaleX + , floorScale //scaleY + , floorScale //scaleZ + , 0.0f //rotX + , 0.0f //rotY + , 0.0f //rotZ + , 0.0f //translateX + , -0.1f //translateY + , 0.0f //translateZ + ); + + hplaneMesh.submit(RENDER_PASS_14 + , floorBottomMtx + , s_programs.m_texture + , s_renderStates[RenderState::Custom_DrawPlaneBottom] + , texFigure + ); + } + + // Draw depth rect. + if (settings.m_drawDepthBuffer) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[0]); + bgfx::setProgram(s_programs.m_drawDepth[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_15); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1; ii < settings.m_numSplits; ++ii) + { + bgfx::setTexture(4, u_shadowMap[0], s_rtShadowMap[ii]); + bgfx::setProgram(s_programs.m_drawDepth[depthType]); + bgfx::setState(BGFX_STATE_RGB_WRITE|BGFX_STATE_ALPHA_WRITE); + screenSpaceQuad(currentShadowMapSizef, currentShadowMapSizef, s_flipV); + bgfx::submit(RENDER_PASS_15+ii); + } + } + } + + // Update render target size. + shadowMapSize = 1 << uint32_t(currentSmSettings->m_sizePwrTwo); + if (bLtChanged || currentShadowMapSize != shadowMapSize) + { + currentShadowMapSize = shadowMapSize; + currentShadowMapSizef = float(int16_t(currentShadowMapSize) ); + s_uniforms.m_shadowMapTexelSize = 1.0f / currentShadowMapSizef; + + bgfx::destroyRenderTarget(s_rtShadowMap[0]); + s_rtShadowMap[0] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + + if (LightType::DirectionalLight == settings.m_lightType) + { + for (uint8_t ii = 1; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::destroyRenderTarget(s_rtShadowMap[ii]); + s_rtShadowMap[ii] = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8 | BGFX_RENDER_TARGET_DEPTH_D24S8); + } + } + + bgfx::destroyRenderTarget(s_rtBlur); + s_rtBlur = bgfx::createRenderTarget(currentShadowMapSize, currentShadowMapSize, BGFX_RENDER_TARGET_COLOR_RGBA8); + } + + // Advance to next frame. Rendering thread will be kicked to + // process submitted rendering primitives. + bgfx::frame(); + + } + + bunnyMesh.unload(); + treeMesh.unload(); + cubeMesh.unload(); + hollowcubeMesh.unload(); + hplaneMesh.unload(); + vplaneMesh.unload(); + + bgfx::destroyTexture(texFigure); + bgfx::destroyTexture(texFieldstone); + bgfx::destroyTexture(texFlare); + + for (uint8_t ii = 0; ii < ShadowMapRenderTargets::Count; ++ii) + { + bgfx::destroyRenderTarget(s_rtShadowMap[ii]); + } + bgfx::destroyRenderTarget(s_rtBlur); + + s_programs.destroy(); + + bgfx::destroyUniform(u_texColor); + bgfx::destroyUniform(u_shadowMap[3]); + bgfx::destroyUniform(u_shadowMap[2]); + bgfx::destroyUniform(u_shadowMap[1]); + bgfx::destroyUniform(u_shadowMap[0]); + + s_uniforms.destroy(); + + imguiDestroy(); + + // Shutdown bgfx. + bgfx::shutdown(); + + return 0; +} diff --git a/examples/16-shadowmaps/tree.obj b/examples/16-shadowmaps/tree.obj new file mode 100644 index 000000000..f57befcfb --- /dev/null +++ b/examples/16-shadowmaps/tree.obj @@ -0,0 +1,14156 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +g tree_tree.001 +v -0.528409 0.097456 -0.473664 +v -0.478109 -0.000000 0.533369 +v 0.528409 -0.097456 0.473663 +v 0.478109 0.000000 -0.533369 +v -0.462358 1.211925 -0.307472 +v -0.418346 1.126652 0.573681 +v 0.462358 1.041378 0.521439 +v 0.418346 1.126652 -0.359714 +v -0.161610 2.345739 -0.146935 +v -0.124433 2.269162 0.608021 +v 0.617872 2.115946 0.555926 +v 0.580694 2.192523 -0.199030 +v 0.138871 3.395035 0.012115 +v 0.172703 3.347843 0.642563 +v 0.799581 3.268506 0.602984 +v 0.765749 3.315698 -0.027465 +v 0.252438 4.463923 0.117709 +v 0.281878 4.461236 0.623338 +v 0.787508 4.458720 0.593885 +v 0.758068 4.461408 0.088255 +v 0.280523 5.583565 0.140432 +v 0.302545 5.595459 0.519476 +v 0.681740 5.599979 0.497304 +v 0.659719 5.588085 0.118260 +v 0.355254 6.718205 0.167615 +v 0.370780 6.750537 0.418309 +v 0.622686 6.727806 0.405640 +v 0.607160 6.695473 0.154946 +v 0.599378 7.806367 -0.038032 +v 0.607516 7.826366 0.086737 +v 0.733109 7.811326 0.080956 +v 0.724972 7.791327 -0.043812 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v 0.736643 8.933455 -0.083840 +v -0.043875 1.245991 0.720704 +v 0.625158 1.126652 0.151676 +v 0.043874 1.007312 -0.506737 +v -0.625158 1.126652 0.062291 +v 0.040456 2.345212 0.463796 +v 0.613913 2.242920 -0.023942 +v 0.115669 2.140629 -0.588296 +v -0.457787 2.242920 -0.100557 +v -0.001515 3.470312 0.106235 +v 0.476565 3.375144 -0.297769 +v 0.062834 3.216559 -0.750002 +v -0.415246 3.311727 -0.345997 +v -0.067156 4.515477 -0.372318 +v 0.314097 4.452688 -0.699792 +v -0.013792 4.291711 -1.050663 +v -0.395045 4.354500 -0.723189 +v -0.260558 5.556573 -0.791282 +v 0.022492 5.525999 -1.042776 +v -0.218554 5.377425 -1.296004 +v -0.501603 5.408000 -1.044509 +v -0.520580 6.544024 -1.320909 +v -0.331084 6.520402 -1.487243 +v -0.487913 6.405616 -1.649609 +v -0.677409 6.429238 -1.483274 +v -0.787409 7.514112 -1.862816 +v -0.689601 7.487138 -1.938576 +v -0.768620 7.432738 -2.021221 +v -0.866427 7.459712 -1.945460 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v -0.768813 8.442052 -2.527225 +v 0.110011 1.175972 -0.508065 +v -0.616962 1.126652 -0.003370 +v -0.110011 1.077331 0.722032 +v 0.616962 1.126652 0.217337 +v 0.071790 2.293404 -0.294377 +v -0.551330 2.251130 0.138220 +v -0.116801 2.208855 0.759993 +v 0.506319 2.251130 0.327396 +v 0.047230 3.417485 -0.157068 +v -0.472030 3.381736 0.203388 +v -0.109914 3.345987 0.721492 +v 0.409345 3.381736 0.361036 +v 0.008297 4.548745 0.060599 +v -0.406859 4.505913 0.347559 +v -0.116916 4.463082 0.760637 +v 0.298240 4.505913 0.473677 +v -0.032621 5.681410 0.289360 +v -0.343415 5.628910 0.501379 +v -0.125385 5.576409 0.807986 +v 0.185410 5.628910 0.595967 +v -0.102806 6.774024 0.676786 +v -0.306889 6.704557 0.809670 +v -0.161189 6.665717 1.013132 +v 0.042894 6.735184 0.880248 +v -0.379880 7.796240 1.099022 +v -0.480396 7.753480 1.163067 +v -0.408523 7.739197 1.266332 +v -0.308007 7.781956 1.202287 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.626063 8.834417 1.481314 +v -0.405540 2.413642 -0.222202 +v -0.090634 2.242920 0.447793 +v 0.561666 2.072199 0.097702 +v 0.246759 2.242920 -0.572293 +v -0.002438 3.464207 -0.307356 +v 0.259984 3.321939 0.250973 +v 0.803567 3.179670 -0.040770 +v 0.541145 3.321939 -0.599099 +v 0.437213 4.495812 0.060550 +v 0.612478 4.280862 0.484359 +v 1.057593 4.196939 0.257719 +v 0.882328 4.411890 -0.166090 +v 0.910062 5.444958 0.465193 +v 1.054590 5.317750 0.792654 +v 1.377485 5.226364 0.614640 +v 1.232957 5.353572 0.287179 +v 1.402369 6.446171 0.540025 +v 1.512086 6.396442 0.762787 +v 1.723394 6.325138 0.642793 +v 1.613676 6.374866 0.420031 +v 1.833586 7.488668 0.608838 +v 1.889037 7.465502 0.720291 +v 1.995540 7.432285 0.660399 +v 1.940089 7.455451 0.548945 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 2.281373 8.530154 0.679686 +v 0.045757 3.472828 0.272978 +v 0.432800 3.331770 0.753746 +v 0.892695 3.190712 0.342120 +v 0.505653 3.331770 -0.138647 +v 0.515805 4.507779 0.235422 +v 0.825438 4.394933 0.620036 +v 1.193355 4.282086 0.290736 +v 0.883721 4.394933 -0.093878 +v 0.921591 5.550832 0.344195 +v 1.151251 5.457928 0.632164 +v 1.434927 5.398242 0.386672 +v 1.205267 5.491146 0.098703 +v 1.315454 6.625363 0.448768 +v 1.462872 6.546413 0.638948 +v 1.648335 6.495693 0.474131 +v 1.500917 6.574642 0.283951 +v 1.892594 7.603518 0.611496 +v 1.961289 7.551551 0.704308 +v 2.056149 7.531493 0.622866 +v 1.987455 7.583460 0.530055 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 2.337806 8.582873 0.960303 +v 0.075119 3.414347 0.119133 +v 0.700214 3.321939 0.158545 +v 0.726010 3.229530 -0.467260 +v 0.100915 3.321939 -0.506672 +v 0.368823 4.484950 -0.145467 +v 0.868899 4.411023 -0.113937 +v 0.889536 4.337096 -0.614581 +v 0.389460 4.411023 -0.646111 +v 0.549206 5.562881 -0.306934 +v 0.928361 5.548334 -0.288741 +v 0.944583 5.500314 -0.665214 +v 0.565428 5.514861 -0.683407 +v 0.597441 6.679924 -0.543151 +v 0.849305 6.657441 -0.529267 +v 0.859673 6.619125 -0.779383 +v 0.607809 6.641608 -0.793268 +v 0.897027 7.759521 -0.757094 +v 1.022450 7.743809 -0.749626 +v 1.028488 7.732147 -0.875566 +v 0.903066 7.747859 -0.883035 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v 1.018853 8.875552 -0.853471 +v -0.099812 4.508025 -0.374087 +v 0.312258 4.403594 -0.649457 +v 0.018864 4.299163 -1.048894 +v -0.393205 4.403594 -0.773524 +v -0.017385 5.544228 -0.842778 +v 0.291667 5.465904 -1.049305 +v 0.071622 5.387581 -1.348883 +v -0.237430 5.465904 -1.142356 +v 0.042950 6.590305 -1.185851 +v 0.250028 6.565259 -1.329466 +v 0.104374 6.540214 -1.535115 +v -0.102703 6.565259 -1.391500 +v 0.066088 7.704221 -1.318290 +v 0.169526 7.689857 -1.389897 +v 0.097274 7.687843 -1.493863 +v -0.006165 7.702207 -1.422256 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.263418 8.805511 -1.535754 +v 0.586701 4.527606 0.460327 +v 1.066936 4.394933 0.551476 +v 1.122458 4.262259 0.065831 +v 0.642224 4.394933 -0.025318 +v 0.952455 5.563603 0.191010 +v 1.312631 5.464098 0.259372 +v 1.354273 5.364594 -0.104861 +v 0.994097 5.464098 -0.173223 +v 1.395377 6.562186 -0.135079 +v 1.628954 6.477534 -0.085993 +v 1.662767 6.428145 -0.332064 +v 1.429190 6.512798 -0.381150 +v 1.899929 7.566116 -0.211382 +v 2.015583 7.520914 -0.186593 +v 2.037583 7.509125 -0.310732 +v 1.921929 7.554327 -0.335521 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 2.362276 8.598434 -0.285657 +v 0.234590 5.599739 0.212547 +v 0.374764 5.591772 0.565518 +v 0.727674 5.583805 0.425189 +v 0.587500 5.591772 0.072218 +v 0.463122 6.717524 0.311101 +v 0.556572 6.712213 0.546415 +v 0.791845 6.706901 0.452862 +v 0.698396 6.712213 0.217548 +v 0.460257 7.836196 0.309866 +v 0.506938 7.840132 0.427504 +v 0.624532 7.844068 0.380709 +v 0.577850 7.840132 0.263071 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.536183 8.971832 0.342609 +v 0.908358 5.459203 0.501608 +v 1.100631 5.335661 0.805038 +v 1.379189 5.212119 0.578225 +v 1.186916 5.335661 0.274795 +v 1.582771 6.375226 0.611354 +v 1.710952 6.292865 0.813640 +v 1.896658 6.210504 0.662432 +v 1.768476 6.292865 0.460145 +v 2.085047 7.370366 0.693394 +v 2.155433 7.343212 0.795090 +v 2.250140 7.306163 0.719648 +v 2.179754 7.333317 0.617953 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 2.558996 8.397515 0.631808 +v 0.942113 5.539180 -0.670418 +v 0.562476 5.531597 -0.681370 +v 0.551676 5.524014 -0.301729 +v 0.931312 5.531597 -0.290778 +v 0.853708 6.667255 -0.564462 +v 0.600617 6.662200 -0.571763 +v 0.593416 6.657146 -0.318669 +v 0.846507 6.662200 -0.311368 +v 0.765387 7.798831 -0.503640 +v 0.639236 7.788551 -0.507357 +v 0.635508 7.788537 -0.380789 +v 0.761659 7.798817 -0.377072 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.540220 8.913995 -0.446709 +v 0.428081 6.744906 0.119655 +v 0.320734 6.723005 0.347977 +v 0.549859 6.701104 0.453600 +v 0.657205 6.723005 0.225278 +v 0.526116 7.835466 0.453931 +v 0.472443 7.824516 0.568092 +v 0.587005 7.813565 0.620903 +v 0.640678 7.824516 0.506743 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v 0.583237 8.955894 0.545132 +v -0.042385 6.759718 0.695130 +v -0.285679 6.719871 0.753041 +v -0.221611 6.680023 0.994788 +v 0.021684 6.719871 0.936876 +v -0.208110 7.846725 0.972215 +v -0.329757 7.826801 1.001170 +v -0.297723 7.806878 1.122043 +v -0.176075 7.826801 1.093088 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v -0.390498 8.926323 1.277159 +v 0.617951 6.663674 -0.521149 +v 0.869114 6.649524 -0.550314 +v 0.839163 6.635374 -0.801385 +v 0.588000 6.649524 -0.772220 +v 0.652161 7.787807 -0.564487 +v 0.777743 7.780732 -0.579070 +v 0.762767 7.773657 -0.704605 +v 0.637185 7.780732 -0.690022 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 0.838714 8.892449 -0.800817 +v 1.377453 6.589841 -0.244308 +v 1.516423 6.495166 -0.054946 +v 1.680690 6.400490 -0.222835 +v 1.541721 6.495166 -0.412197 +v 1.992822 7.525069 -0.394599 +v 2.062307 7.477731 -0.299918 +v 2.144441 7.430393 -0.383862 +v 2.074956 7.477731 -0.478543 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 2.702756 8.384189 -0.150461 +v 0.800229 6.671528 -0.280005 +v 0.885343 6.662200 -0.518337 +v 0.646895 6.652873 -0.603127 +v 0.561781 6.662200 -0.364794 +v 0.759049 7.798564 -0.366785 +v 0.801605 7.793900 -0.485951 +v 0.682381 7.789237 -0.528346 +v 0.639824 7.793900 -0.409180 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v 0.673068 8.920150 -0.547972 +v -0.718623 7.521231 -1.895071 +v -0.722490 7.473425 -2.012259 +v -0.837405 7.425619 -1.988966 +v -0.833538 7.473425 -1.871777 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v -1.252052 8.430329 -2.316733 +v 1.897282 7.612772 0.622163 +v 1.980146 7.567505 0.706531 +v 2.051461 7.522239 0.612199 +v 1.968597 7.567505 0.527831 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 2.545339 8.543940 0.580283 +v 0.040961 7.718984 -1.482443 +v 0.002674 7.696032 -1.363949 +v 0.122400 7.673080 -1.329710 +v 0.160687 7.696032 -1.448204 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 0.218177 8.789937 -1.150088 +v 2.091922 7.383285 0.722760 +v 2.186380 7.338264 0.794064 +v 2.243265 7.293244 0.690282 +v 2.148807 7.338264 0.618978 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 2.723973 8.316516 0.587124 +v 0.578359 7.844239 0.452844 +v 0.469858 7.824516 0.515070 +v 0.534762 7.804793 0.621990 +v 0.643263 7.824516 0.559765 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 0.494338 8.928437 0.778821 +v 2.002199 7.511489 -0.438867 +v 2.015040 7.477731 -0.317504 +v 2.135065 7.443973 -0.339594 +v 2.122223 7.477731 -0.460957 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 2.410454 8.525929 -0.133832 +v 0.030978 2.218528 0.282723 +v 0.476373 1.789166 0.472171 +v 0.242779 1.359805 0.048259 +v -0.202616 1.789166 -0.141190 +v 0.445634 2.394507 -0.176301 +v 0.846490 2.008082 -0.005797 +v 0.636256 1.621656 -0.387319 +v 0.235399 2.008082 -0.557822 +v 0.849132 2.569747 -0.622973 +v 1.215357 2.232064 -0.482382 +v 1.038391 1.894381 -0.832481 +v 0.672166 2.232064 -0.973071 +v 1.187754 2.756847 -1.030606 +v 1.444959 2.420209 -0.870469 +v 1.479421 2.247960 -1.287921 +v 1.222215 2.584598 -1.448058 +v 1.658881 3.016298 -0.795178 +v 1.789981 2.672174 -0.672317 +v 1.989316 2.630133 -1.002773 +v 1.858217 2.974257 -1.125633 +v 2.183699 3.224029 -0.548596 +v 2.332776 2.964849 -0.425078 +v 2.503755 2.933187 -0.697876 +v 2.354678 3.192366 -0.821394 +v 2.562576 3.648449 -0.376433 +v 2.746550 3.516589 -0.250951 +v 2.869656 3.475306 -0.474825 +v 2.685682 3.607166 -0.600307 +v 2.875487 4.198833 -0.424820 +v 3.029747 4.129629 -0.329476 +v 3.111391 4.079177 -0.498191 +v 2.957130 4.148380 -0.593535 +v 3.196875 4.748547 -0.473247 +v 3.306449 4.717864 -0.411629 +v 3.357811 4.677191 -0.523220 +v 3.248237 4.707875 -0.584838 +v 3.401637 5.320391 -0.666617 +v 3.459148 5.313344 -0.637824 +v 3.483896 5.290167 -0.692929 +v 3.426385 5.297215 -0.721722 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 3.600776 5.902134 -0.853176 +v 0.564181 3.937667 0.499199 +v 0.868935 3.557681 0.135679 +v 0.394571 3.177695 0.135198 +v 0.089817 3.557681 0.498718 +v 0.346121 4.266285 0.031221 +v 0.620400 3.924297 -0.295947 +v 0.193472 3.582310 -0.296380 +v -0.080806 3.924297 0.030788 +v 0.077598 4.447006 -0.545058 +v 0.335432 4.127666 -0.805763 +v -0.030029 3.808327 -0.776037 +v -0.287863 4.127666 -0.515332 +v -0.157120 4.650384 -1.048788 +v 0.058904 4.381118 -1.297467 +v -0.270456 4.111852 -1.292019 +v -0.486479 4.381118 -1.043340 +v -0.389678 4.891850 -1.527435 +v -0.192695 4.613067 -1.655756 +v -0.494952 4.463249 -1.794259 +v -0.691935 4.742032 -1.665939 +v -0.023962 5.078492 -1.952825 +v 0.107580 4.807671 -1.994122 +v -0.092485 4.743999 -2.213832 +v -0.224027 5.014821 -2.172536 +v 0.329115 5.294895 -2.374830 +v 0.459604 5.098988 -2.435647 +v 0.305490 5.052929 -2.617947 +v 0.175001 5.248836 -2.557129 +v 0.615964 5.661395 -2.719426 +v 0.746423 5.573839 -2.811953 +v 0.625115 5.528870 -2.940441 +v 0.494655 5.616426 -2.847914 +v 0.562531 6.188720 -2.996017 +v 0.652214 6.165949 -3.074852 +v 0.570710 6.127679 -3.156516 +v 0.481028 6.150450 -3.077681 +v 0.522424 6.750989 -3.229042 +v 0.566836 6.745210 -3.270130 +v 0.525547 6.733097 -3.313056 +v 0.481135 6.738876 -3.271967 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.483738 7.354445 -3.334101 +v 0.270573 5.532626 0.407214 +v 0.588518 5.365683 0.594894 +v 0.707227 5.198740 0.245293 +v 0.389282 5.365683 0.057613 +v 0.564536 5.962564 0.298206 +v 0.850686 5.812315 0.467118 +v 0.957524 5.662066 0.152477 +v 0.671374 5.812315 -0.016434 +v 0.923466 6.397952 0.165107 +v 1.149977 6.230562 0.325576 +v 1.217099 6.063172 0.056221 +v 0.990588 6.230562 -0.104248 +v 1.394898 6.710867 -0.018780 +v 1.593808 6.564965 0.121210 +v 1.569436 6.352725 -0.065364 +v 1.370526 6.498627 -0.205354 +v 1.732361 6.817055 -0.467815 +v 1.915066 6.697523 -0.360873 +v 1.836507 6.489503 -0.459170 +v 1.653802 6.609035 -0.566112 +v 2.050285 6.840204 -0.898243 +v 2.202402 6.740556 -0.808934 +v 2.136698 6.567140 -0.890515 +v 1.984580 6.666788 -0.979824 +v 2.350442 6.927353 -1.306278 +v 2.468645 6.846192 -1.230712 +v 2.441736 6.718056 -1.326244 +v 2.323533 6.799217 -1.401809 +v 2.733628 7.136052 -1.559801 +v 2.827574 7.079269 -1.507586 +v 2.836925 7.005977 -1.604112 +v 2.742979 7.062759 -1.656327 +v 3.006976 7.523080 -1.739935 +v 3.082905 7.506373 -1.717065 +v 3.095454 7.467556 -1.787087 +v 3.019526 7.484262 -1.809956 +v 3.088130 7.967063 -2.001718 +v 3.127809 7.966621 -1.993522 +v 3.135410 7.953326 -2.031037 +v 3.095730 7.953768 -2.039232 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 3.131412 8.486127 -2.098401 +v 0.483662 7.268889 0.228216 +v 0.635827 7.157342 0.302031 +v 0.636097 7.045794 0.132907 +v 0.483932 7.157342 0.059092 +v 0.688479 7.508941 0.100156 +v 0.825427 7.408549 0.166590 +v 0.825670 7.308156 0.014379 +v 0.688722 7.408549 -0.052055 +v 0.954358 7.678635 -0.066081 +v 1.067884 7.582398 -0.001898 +v 1.059895 7.486161 -0.132067 +v 0.946369 7.582398 -0.196250 +v 1.191689 7.858946 -0.214469 +v 1.297306 7.780021 -0.162237 +v 1.296597 7.701096 -0.280062 +v 1.190980 7.780021 -0.332294 +v 1.421492 8.074857 -0.359087 +v 1.525034 8.020116 -0.326546 +v 1.505457 7.933648 -0.409712 +v 1.401915 7.988389 -0.442253 +v 1.534584 8.191300 -0.670799 +v 1.626938 8.152591 -0.655513 +v 1.598554 8.066798 -0.701289 +v 1.506201 8.105508 -0.716576 +v 1.643219 8.306662 -0.972986 +v 1.717352 8.276012 -0.961490 +v 1.695201 8.208086 -0.999735 +v 1.621067 8.238735 -1.011231 +v 1.747877 8.427661 -1.259939 +v 1.806696 8.413178 -1.264906 +v 1.792416 8.368400 -1.303442 +v 1.733597 8.382882 -1.298474 +v 1.713542 8.680011 -1.464676 +v 1.752693 8.678644 -1.475024 +v 1.743105 8.658057 -1.508581 +v 1.703954 8.659424 -1.498233 +v 1.693589 8.987329 -1.609271 +v 1.713202 8.984406 -1.613422 +v 1.708338 8.978333 -1.632127 +v 1.688724 8.981256 -1.627976 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 1.776800 9.305593 -1.705940 +v 0.215254 3.096841 -0.010823 +v 0.389574 2.683126 -0.498433 +v -0.097051 2.269412 -0.321383 +v -0.271371 2.683126 0.166227 +v -0.210909 3.358126 -0.434604 +v -0.054021 2.985784 -0.873453 +v -0.491984 2.613441 -0.714108 +v -0.648871 2.985784 -0.275259 +v -0.659801 3.645069 -0.880988 +v -0.494363 3.297059 -1.245238 +v -0.857680 2.949050 -1.077760 +v -1.023118 3.297059 -0.713510 +v -1.139512 3.784241 -1.362591 +v -0.936712 3.448618 -1.610565 +v -1.271894 3.153373 -1.485084 +v -1.474694 3.488996 -1.237110 +v -1.383661 3.907599 -1.943588 +v -1.191638 3.608573 -2.122088 +v -1.508300 3.373821 -2.069482 +v -1.700324 3.672846 -1.890982 +v -1.626861 4.072141 -2.518675 +v -1.470019 3.825666 -2.675130 +v -1.736399 3.632169 -2.637340 +v -1.893241 3.878644 -2.480885 +v -1.864952 4.234695 -3.085543 +v -1.762066 4.057687 -3.253984 +v -1.968971 3.897353 -3.211874 +v -2.071856 4.074361 -3.043433 +v -2.246600 4.507585 -3.467844 +v -2.204152 4.414534 -3.638366 +v -2.370815 4.307419 -3.621403 +v -2.413263 4.400470 -3.450882 +v -2.498368 4.990359 -3.728112 +v -2.486661 4.963476 -3.857389 +v -2.613716 4.925848 -3.861070 +v -2.625423 4.952732 -3.731792 +v -2.623986 5.599682 -3.789401 +v -2.619555 5.601023 -3.855519 +v -2.685446 5.606771 -3.859818 +v -2.689877 5.605429 -3.793700 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v -2.448132 6.219825 -3.761762 +v 0.182796 4.498444 -0.693067 +v -0.129190 4.191563 -0.995257 +v -0.235290 3.884681 -0.574072 +v 0.076696 4.191563 -0.271882 +v -0.307591 4.780833 -0.553493 +v -0.588379 4.504640 -0.825464 +v -0.683868 4.228446 -0.446398 +v -0.403081 4.504640 -0.174427 +v -0.768359 5.106679 -0.422350 +v -1.017959 4.861182 -0.664099 +v -1.102850 4.615685 -0.327148 +v -0.853251 4.861182 -0.085399 +v -1.278765 5.402453 -0.277079 +v -1.477119 5.174305 -0.494315 +v -1.531353 4.946158 -0.205188 +v -1.332999 5.174305 0.012048 +v -1.795930 5.636257 -0.130221 +v -1.925755 5.417789 -0.323188 +v -2.006653 5.241852 -0.069573 +v -1.876828 5.460320 0.123394 +v -2.293664 5.867306 -0.207564 +v -2.397005 5.682246 -0.368129 +v -2.513417 5.565999 -0.159222 +v -2.410076 5.751059 0.001343 +v -2.731299 6.202507 -0.271831 +v -2.834881 6.071668 -0.403759 +v -2.941145 5.989480 -0.238817 +v -2.837563 6.120318 -0.106889 +v -3.143533 6.579815 -0.333081 +v -3.245724 6.509654 -0.433526 +v -3.323883 6.446256 -0.309726 +v -3.221692 6.516418 -0.209281 +v -3.439849 7.040773 -0.220347 +v -3.521527 7.018296 -0.284663 +v -3.577186 6.982401 -0.201436 +v -3.495508 7.004879 -0.137119 +v -3.621927 7.573471 -0.156214 +v -3.664697 7.569645 -0.187589 +v -3.695568 7.563377 -0.144741 +v -3.652798 7.567203 -0.113366 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -3.654834 8.148314 -0.150027 +v -0.504691 5.793649 -1.085307 +v -0.238655 5.668563 -0.887114 +v -0.080297 5.543478 -1.178625 +v -0.346333 5.668563 -1.376818 +v -0.319026 6.269679 -1.126132 +v -0.079594 6.157102 -0.947758 +v 0.062929 6.044524 -1.210117 +v -0.176504 6.157102 -1.388492 +v 0.064719 6.691062 -1.210511 +v 0.245086 6.548011 -1.044818 +v 0.339310 6.404961 -1.270889 +v 0.158943 6.548011 -1.436581 +v 0.474931 7.009770 -1.301599 +v 0.652955 6.904656 -1.164294 +v 0.704082 6.748398 -1.350206 +v 0.526059 6.853513 -1.487512 +v 0.784270 7.325398 -1.594241 +v 0.953355 7.250527 -1.489087 +v 0.963187 7.085212 -1.622604 +v 0.794102 7.160083 -1.727758 +v 1.142637 7.519582 -1.938004 +v 1.278548 7.453396 -1.845413 +v 1.275717 7.307259 -1.945719 +v 1.139806 7.373444 -2.038311 +v 1.474813 7.723254 -2.259379 +v 1.555735 7.649567 -2.169189 +v 1.598867 7.566514 -2.275746 +v 1.517945 7.640202 -2.365935 +v 1.834934 8.016046 -2.095647 +v 1.891590 7.956386 -2.028237 +v 1.960549 7.933952 -2.106049 +v 1.903893 7.993611 -2.173459 +v 2.034887 8.461429 -2.014464 +v 2.083082 8.445204 -1.965047 +v 2.132263 8.437495 -2.015544 +v 2.084067 8.453720 -2.064961 +v 2.116580 8.960448 -2.014332 +v 2.141433 8.962964 -1.989171 +v 2.166472 8.965432 -2.014151 +v 2.141619 8.962916 -2.039311 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v 1.983161 9.454809 -2.016325 +v -0.675641 7.178840 -1.691000 +v -0.543834 7.073983 -1.746296 +v -0.661374 6.969126 -1.827630 +v -0.793180 7.073983 -1.772333 +v -0.648231 7.417481 -1.953491 +v -0.529606 7.323110 -2.003258 +v -0.635391 7.228738 -2.076458 +v -0.754017 7.323110 -2.026691 +v -0.610851 7.553941 -2.311472 +v -0.507690 7.459233 -2.333843 +v -0.604004 7.364525 -2.377043 +v -0.707166 7.459233 -2.354672 +v -0.574421 7.641823 -2.660360 +v -0.484426 7.558088 -2.677329 +v -0.568974 7.474352 -2.712523 +v -0.658968 7.558088 -2.695554 +v -0.542313 7.740645 -2.990953 +v -0.470950 7.661814 -2.988474 +v -0.530673 7.605619 -3.056213 +v -0.602036 7.684450 -3.058692 +v -0.275228 7.871494 -3.146321 +v -0.214629 7.806815 -3.145391 +v -0.239495 7.782346 -3.226873 +v -0.300094 7.847025 -3.227803 +v -0.088034 8.136748 -3.261612 +v -0.029864 8.096497 -3.266527 +v -0.046091 8.081269 -3.333854 +v -0.104260 8.121521 -3.328938 +v 0.099844 8.413099 -3.377527 +v 0.144845 8.385094 -3.381879 +v 0.135813 8.378662 -3.433892 +v 0.090812 8.406668 -3.429541 +v 0.277468 8.712964 -3.414500 +v 0.310975 8.702065 -3.418446 +v 0.306681 8.701608 -3.453636 +v 0.273175 8.712506 -3.449690 +v 0.322983 9.063005 -3.430531 +v 0.340589 9.062873 -3.432592 +v 0.338531 9.063192 -3.450196 +v 0.320924 9.063325 -3.448135 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v 0.298845 9.419161 -3.421915 +v -0.001671 3.185294 0.116325 +v -0.519610 2.703372 0.164287 +v -0.050410 2.221451 0.388814 +v 0.467529 2.703372 0.340852 +v -0.126717 3.368171 0.815430 +v -0.592862 2.934442 0.858596 +v -0.170582 2.500713 1.060671 +v 0.295564 2.934442 1.017505 +v -0.267898 3.507638 1.604745 +v -0.669017 3.108096 1.569138 +v -0.280425 2.708554 1.674783 +v 0.120694 3.108096 1.710390 +v -0.426990 3.411704 2.393897 +v -0.674995 3.065660 2.138703 +v -0.379212 2.714534 2.327383 +v -0.131207 3.060579 2.582576 +v -1.151400 3.243455 2.691069 +v -1.198372 2.992833 2.350491 +v -1.007822 2.674379 2.558552 +v -0.960851 2.925001 2.899131 +v -1.770264 2.849980 2.926359 +v -1.788718 2.649581 2.634465 +v -1.603640 2.394943 2.797585 +v -1.585185 2.595342 3.089478 +v -2.380609 2.551003 3.161944 +v -2.312889 2.420087 2.919612 +v -2.272855 2.177867 3.061655 +v -2.340575 2.308782 3.303987 +v -2.959496 2.454287 2.722028 +v -2.841282 2.367758 2.567784 +v -2.881596 2.173931 2.645622 +v -2.999810 2.260460 2.799865 +v -3.529651 2.360264 2.291184 +v -3.438811 2.301606 2.199425 +v -3.499488 2.175120 2.220214 +v -3.590328 2.233779 2.311973 +v -3.799464 2.605383 1.682211 +v -3.754282 2.576247 1.635975 +v -3.803355 2.528215 1.618288 +v -3.848537 2.557351 1.664525 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -3.998466 3.138178 1.234311 +v -0.256358 4.577042 0.279489 +v -0.220643 4.281078 0.719898 +v 0.156926 3.985113 0.490384 +v 0.121211 4.281078 0.049976 +v 0.155792 4.909343 0.489806 +v 0.187936 4.642975 0.886173 +v 0.527749 4.376607 0.679611 +v 0.495605 4.642975 0.283243 +v 0.576832 5.214528 0.704658 +v 0.611553 4.983334 1.060123 +v 0.919758 4.752141 0.879650 +v 0.885037 4.983334 0.524185 +v 0.952326 5.554422 0.896269 +v 1.000441 5.370520 1.216350 +v 1.287855 5.186618 1.067485 +v 1.239740 5.370520 0.747404 +v 1.319813 5.962473 1.082592 +v 1.382636 5.826939 1.364555 +v 1.592181 5.631621 1.223981 +v 1.529358 5.767155 0.942019 +v 1.827044 6.258907 1.100334 +v 1.895367 6.158826 1.337026 +v 2.032796 5.966105 1.215868 +v 1.964472 6.066185 0.979175 +v 2.282469 6.553214 1.116304 +v 2.351295 6.485343 1.305802 +v 2.488519 6.354647 1.209152 +v 2.419693 6.422518 1.019654 +v 2.605069 6.960312 1.137319 +v 2.692452 6.962200 1.270793 +v 2.810347 6.886287 1.194684 +v 2.722965 6.884399 1.061209 +v 2.733980 7.405344 0.860235 +v 2.797761 7.426516 0.942679 +v 2.882041 7.396384 0.885214 +v 2.818260 7.375213 0.802771 +v 2.794994 7.965482 0.796350 +v 2.826404 7.969051 0.839117 +v 2.869305 7.965096 0.807938 +v 2.837895 7.961527 0.765171 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v 2.831296 8.533143 0.761145 +v -0.251639 5.952323 0.767691 +v 0.086413 5.847103 0.786452 +v 0.072436 5.741882 0.448169 +v -0.265616 5.847103 0.429408 +v -0.152376 6.369647 0.669823 +v 0.151870 6.274948 0.686708 +v 0.139291 6.180249 0.382253 +v -0.164955 6.274948 0.365368 +v 0.070621 6.782498 0.449959 +v 0.312597 6.640930 0.493033 +v 0.272950 6.499361 0.250472 +v 0.030974 6.640930 0.207398 +v 0.361912 7.042350 0.153082 +v 0.580000 6.927280 0.181206 +v 0.501627 6.742934 0.034685 +v 0.283540 6.858004 0.006561 +v 0.416067 7.181156 -0.284645 +v 0.610962 7.096176 -0.291502 +v 0.528016 6.911130 -0.355773 +v 0.333120 6.996110 -0.348916 +v 0.465855 7.256377 -0.706594 +v 0.629086 7.188687 -0.720716 +v 0.561744 7.041291 -0.792585 +v 0.398514 7.108981 -0.778463 +v 0.506091 7.473518 -1.064455 +v 0.630839 7.406496 -1.056814 +v 0.592503 7.322838 -1.164722 +v 0.467755 7.389861 -1.172363 +v 0.802767 7.743731 -1.244311 +v 0.884152 7.677615 -1.226469 +v 0.871644 7.636019 -1.323559 +v 0.790259 7.702135 -1.341401 +v 1.081797 8.027205 -1.413946 +v 1.146934 7.999429 -1.410240 +v 1.139211 7.972620 -1.475430 +v 1.074074 8.000398 -1.479136 +v 1.144912 8.410880 -1.598435 +v 1.180199 8.408010 -1.600332 +v 1.177706 8.400151 -1.634814 +v 1.142419 8.403021 -1.632917 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v 1.168875 8.848171 -1.642228 +v -0.203288 7.438608 1.061955 +v -0.268675 7.348580 0.923951 +v -0.375352 7.258552 1.033224 +v -0.309965 7.348580 1.171229 +v -0.403382 7.680932 1.028543 +v -0.462230 7.599907 0.904339 +v -0.558239 7.518882 1.002685 +v -0.499391 7.599907 1.126889 +v -0.688586 7.874747 0.980920 +v -0.718123 7.786000 0.874319 +v -0.780694 7.697253 0.965540 +v -0.751156 7.786000 1.072141 +v -1.007886 7.977595 0.927603 +v -1.015229 7.892677 0.837416 +v -1.051475 7.807759 0.920324 +v -1.044132 7.892677 1.010511 +v -1.325128 8.019187 0.876852 +v -1.383144 7.957044 0.812934 +v -1.352048 7.871465 0.867911 +v -1.294032 7.933609 0.931830 +v -1.351216 7.997553 1.177987 +v -1.429660 7.956294 1.178703 +v -1.389313 7.879930 1.198630 +v -1.310868 7.921190 1.197914 +v -1.382329 8.111908 1.452371 +v -1.446144 8.083068 1.463508 +v -1.415827 8.029692 1.499004 +v -1.352012 8.058532 1.487866 +v -1.411998 8.290936 1.700694 +v -1.459053 8.278932 1.722374 +v -1.436242 8.239766 1.750196 +v -1.389187 8.251771 1.728516 +v -1.281395 8.473245 1.912983 +v -1.310240 8.472101 1.933567 +v -1.293535 8.450059 1.955750 +v -1.264691 8.451202 1.935166 +v -1.210995 8.752906 2.035802 +v -1.225652 8.751491 2.045671 +v -1.215985 8.745179 2.059124 +v -1.201328 8.746594 2.049254 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v -1.200470 9.050039 2.147900 +v 0.888303 5.059340 0.257243 +v 0.599456 4.742090 0.411235 +v 0.923599 4.424841 0.365652 +v 1.212446 4.742090 0.211659 +v 1.098516 5.153478 0.902902 +v 0.838554 4.867954 1.041495 +v 1.130283 4.582429 1.000470 +v 1.390245 4.867954 0.861877 +v 1.318901 5.241826 1.579805 +v 1.078177 4.984366 1.673370 +v 1.327845 4.726907 1.607274 +v 1.568569 4.984366 1.513709 +v 1.534666 5.169797 2.246963 +v 1.311598 4.943348 2.274896 +v 1.535468 4.718581 2.240531 +v 1.758536 4.945030 2.212598 +v 1.508629 5.158965 2.921426 +v 1.316179 4.964624 2.920706 +v 1.510252 4.772389 2.934394 +v 1.702702 4.966730 2.935114 +v 1.484555 5.145156 3.568841 +v 1.322759 4.989028 3.606186 +v 1.483080 4.834593 3.655126 +v 1.644876 4.990720 3.617781 +v 1.455294 5.417045 4.123316 +v 1.336647 5.339576 4.238070 +v 1.467504 5.227461 4.297680 +v 1.586152 5.304929 4.182927 +v 1.783682 5.880831 4.426055 +v 1.713172 5.865119 4.542171 +v 1.816268 5.792396 4.594935 +v 1.886778 5.808107 4.478819 +v 1.996839 6.470776 4.638227 +v 1.951771 6.466588 4.717367 +v 2.029778 6.448174 4.760814 +v 2.074845 6.452362 4.681674 +v 1.996371 7.145664 4.665494 +v 1.974119 7.146146 4.705276 +v 2.013800 7.143133 4.727508 +v 2.036052 7.142652 4.687726 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 2.099106 7.822017 4.731025 +v 1.318795 6.164705 0.597513 +v 1.466097 5.965657 0.773680 +v 1.471681 5.766610 0.544112 +v 1.324379 5.965657 0.367944 +v 1.749373 6.397263 0.447118 +v 1.881945 6.218120 0.605668 +v 1.886970 6.038977 0.399057 +v 1.754398 6.218120 0.240506 +v 2.253746 6.518256 0.270947 +v 2.344070 6.350080 0.421492 +v 2.321019 6.181903 0.247449 +v 2.230695 6.350080 0.096903 +v 2.767833 6.581419 0.091383 +v 2.816403 6.431002 0.233750 +v 2.765771 6.280585 0.092103 +v 2.717201 6.431002 -0.050265 +v 3.290636 6.463255 -0.079418 +v 3.225880 6.354299 0.051663 +v 3.199487 6.222178 -0.071196 +v 3.264243 6.331133 -0.202277 +v 3.638539 6.220067 0.247159 +v 3.525837 6.156766 0.327032 +v 3.533295 6.032878 0.239372 +v 3.645997 6.096179 0.159499 +v 3.964824 6.008798 0.561173 +v 3.881528 5.955002 0.631487 +v 3.900930 5.849714 0.573916 +v 3.984226 5.903510 0.503602 +v 4.328576 5.951036 0.909411 +v 4.257292 5.912837 0.951496 +v 4.286436 5.830314 0.925955 +v 4.357720 5.868513 0.883870 +v 4.479576 5.898323 1.399457 +v 4.427389 5.873000 1.417606 +v 4.452276 5.817816 1.412172 +v 4.504463 5.843139 1.394022 +v 4.628603 5.956516 1.881729 +v 4.602313 5.943697 1.889977 +v 4.616948 5.917870 1.896482 +v 4.643237 5.930689 1.888234 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 4.606455 6.174267 2.345134 +v 1.807685 7.312833 0.701321 +v 1.940900 7.245513 0.672862 +v 1.880768 7.178193 0.550632 +v 1.747553 7.245513 0.579091 +v 1.890855 7.580706 0.529833 +v 2.010749 7.520118 0.504219 +v 1.956630 7.459530 0.394212 +v 1.836736 7.520118 0.419825 +v 2.000685 7.824964 0.303373 +v 2.101032 7.757078 0.293444 +v 2.046699 7.689191 0.208497 +v 1.946353 7.757078 0.218427 +v 2.131521 7.983274 0.035812 +v 2.204738 7.906878 0.046577 +v 2.165717 7.857405 -0.039114 +v 2.092499 7.933802 -0.049879 +v 2.398950 8.133719 -0.076206 +v 2.448366 8.059171 -0.058536 +v 2.431868 8.028283 -0.142711 +v 2.382452 8.102832 -0.160381 +v 2.676216 8.271239 -0.192681 +v 2.716579 8.208660 -0.177625 +v 2.702492 8.182731 -0.247634 +v 2.662129 8.245310 -0.262690 +v 2.938106 8.406287 -0.304389 +v 2.980219 8.363460 -0.295092 +v 2.982388 8.352616 -0.354856 +v 2.940274 8.395444 -0.364154 +v 3.112005 8.662230 -0.262485 +v 3.152856 8.643281 -0.255415 +v 3.161369 8.644937 -0.300167 +v 3.120517 8.663886 -0.307237 +v 3.204677 8.972840 -0.245652 +v 3.234306 8.968748 -0.240279 +v 3.239781 8.969136 -0.270169 +v 3.210151 8.973228 -0.275542 +v 3.212860 9.300582 -0.251257 +v 3.227808 9.300556 -0.248535 +v 3.230530 9.300519 -0.263484 +v 3.215581 9.300545 -0.266206 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 3.223598 9.630102 -0.259282 +v 1.410307 5.599770 0.314239 +v 1.120391 5.474537 0.103132 +v 0.946211 5.349304 0.416627 +v 1.236127 5.474537 0.627734 +v 1.159448 6.117548 0.369583 +v 0.898524 6.004838 0.179587 +v 0.741762 5.892128 0.461732 +v 1.002686 6.004838 0.651729 +v 0.812150 6.635890 0.446203 +v 0.605813 6.496907 0.271671 +v 0.492066 6.357924 0.516820 +v 0.698403 6.496907 0.691352 +v 0.333898 7.031605 0.551714 +v 0.186309 6.878866 0.391727 +v 0.119735 6.726127 0.598962 +v 0.267325 6.878866 0.758949 +v -0.177265 7.304986 0.665779 +v -0.334290 7.196167 0.541482 +v -0.347898 7.033782 0.700837 +v -0.190872 7.142601 0.825134 +v -0.488529 7.549577 1.060772 +v -0.653076 7.488842 0.987896 +v -0.655200 7.345329 1.112294 +v -0.490653 7.406064 1.185170 +v -0.757510 7.888221 1.394876 +v -0.897213 7.852334 1.347091 +v -0.917970 7.767537 1.471456 +v -0.778267 7.803423 1.519242 +v -0.924162 8.375962 1.594146 +v -1.034339 8.366439 1.566625 +v -1.056538 8.324195 1.670114 +v -0.946361 8.333718 1.697635 +v -0.983350 8.903073 1.799636 +v -1.057560 8.903519 1.783367 +v -1.073450 8.885119 1.855346 +v -0.999240 8.884674 1.871615 +v -1.021094 9.469335 1.891645 +v -1.058203 9.469692 1.883533 +v -1.066314 9.466308 1.920490 +v -1.029205 9.465950 1.928601 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v -1.039828 10.046574 1.930552 +v 1.429317 6.685497 0.344466 +v 1.318561 6.560528 0.534859 +v 1.534472 6.435558 0.578433 +v 1.645228 6.560528 0.388040 +v 1.566564 6.995203 0.649836 +v 1.466884 6.882730 0.821190 +v 1.661204 6.770257 0.860406 +v 1.760885 6.882730 0.689053 +v 1.705864 7.324919 0.959773 +v 1.611832 7.212953 1.100013 +v 1.779135 7.100987 1.122797 +v 1.873166 7.212953 0.982557 +v 1.871204 7.539141 1.321208 +v 1.791586 7.391662 1.378971 +v 1.934832 7.352199 1.475660 +v 2.014451 7.499678 1.417897 +v 1.477699 7.621879 1.475119 +v 1.444456 7.474857 1.494292 +v 1.499685 7.480813 1.635722 +v 1.532927 7.627835 1.616550 +v 1.070577 7.731249 1.643454 +v 1.039662 7.609668 1.660649 +v 1.085815 7.614593 1.778458 +v 1.116731 7.736175 1.761264 +v 0.693920 7.835646 1.806255 +v 0.638229 7.753254 1.825525 +v 0.646254 7.771077 1.924920 +v 0.701945 7.853469 1.905650 +v 0.437761 8.129720 1.645181 +v 0.372078 8.092354 1.653028 +v 0.365873 8.118207 1.724197 +v 0.431556 8.155573 1.716350 +v 0.247137 8.529601 1.537904 +v 0.199435 8.512829 1.540836 +v 0.199567 8.521188 1.590791 +v 0.247269 8.537960 1.587859 +v 0.110270 8.964600 1.531921 +v 0.085299 8.960515 1.532984 +v 0.086245 8.961311 1.558278 +v 0.111216 8.965396 1.557215 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 0.076394 9.417916 1.541736 +v 1.953063 7.652110 0.597063 +v 1.912905 7.567505 0.682286 +v 1.995680 7.482901 0.637299 +v 2.035838 7.567505 0.552076 +v 2.174715 7.755487 0.806328 +v 2.138574 7.679343 0.883028 +v 2.213071 7.603199 0.842540 +v 2.249213 7.679343 0.765839 +v 2.409611 7.849170 1.028095 +v 2.367510 7.778204 1.086855 +v 2.423755 7.707239 1.041448 +v 2.465856 7.778204 0.982687 +v 2.661268 7.826357 1.265686 +v 2.607572 7.765424 1.301186 +v 2.639929 7.704490 1.245540 +v 2.693625 7.765424 1.210039 +v 2.880743 7.671767 1.485567 +v 2.812600 7.647707 1.462123 +v 2.845460 7.588950 1.426911 +v 2.913604 7.613010 1.450355 +v 2.619406 7.551706 1.655710 +v 2.584197 7.552951 1.603106 +v 2.600464 7.493016 1.590798 +v 2.635674 7.491770 1.643402 +v 2.363401 7.447348 1.816856 +v 2.335301 7.448368 1.774729 +v 2.345064 7.399269 1.767028 +v 2.373164 7.398249 1.809155 +v 2.096337 7.383096 1.985242 +v 2.081343 7.385016 1.950392 +v 2.083493 7.347209 1.947384 +v 2.098487 7.345289 1.982234 +v 1.781346 7.382764 2.050093 +v 1.775924 7.383759 2.025376 +v 1.770766 7.358966 2.025509 +v 1.776188 7.357971 2.050227 +v 1.487956 7.497610 2.110188 +v 1.487263 7.497464 2.097546 +v 1.482255 7.485841 2.097954 +v 1.482948 7.485987 2.110597 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 1.193460 7.622901 2.066832 +v 0.927032 5.726316 -0.443819 +v 0.808237 5.531597 -0.747584 +v 0.566756 5.336878 -0.528329 +v 0.685552 5.531597 -0.224563 +v 0.570833 6.142032 -0.527372 +v 0.463918 5.966785 -0.800761 +v 0.246586 5.791538 -0.603431 +v 0.353501 5.966785 -0.330042 +v 0.062993 6.483123 -0.646496 +v 0.017396 6.291497 -0.877912 +v -0.126349 6.099871 -0.690911 +v -0.080752 6.291497 -0.459495 +v -0.502952 6.647663 -0.787357 +v -0.447339 6.442847 -0.947560 +v -0.590739 6.282027 -0.791736 +v -0.646353 6.486844 -0.631533 +v -0.863551 6.661548 -1.249977 +v -0.753903 6.477898 -1.328706 +v -0.899156 6.342969 -1.216258 +v -1.008804 6.526620 -1.137529 +v -1.203743 6.578241 -1.694341 +v -1.108115 6.425484 -1.754306 +v -1.226032 6.313253 -1.656454 +v -1.321661 6.466011 -1.596489 +v -1.528705 6.536723 -2.127865 +v -1.540355 6.421607 -2.226358 +v -1.571389 6.326732 -2.111799 +v -1.559739 6.441848 -2.013306 +v -1.901074 6.656070 -1.768112 +v -1.988328 6.602489 -1.818142 +v -1.980523 6.518366 -1.741659 +v -1.893270 6.571947 -1.691629 +v -2.207097 6.985665 -1.496440 +v -2.281921 6.975761 -1.505119 +v -2.282648 6.928872 -1.445345 +v -2.207824 6.938776 -1.436666 +v -2.099115 7.387449 -1.151923 +v -2.136566 7.393292 -1.149413 +v -2.136953 7.376235 -1.115473 +v -2.099502 7.370391 -1.117984 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v -2.062814 7.916117 -0.986897 +v 0.882148 6.741593 -0.661234 +v 0.728596 6.649524 -0.840340 +v 0.574966 6.557456 -0.661301 +v 0.728518 6.649524 -0.482195 +v 0.690263 7.212148 -0.661276 +v 0.552065 7.129286 -0.822471 +v 0.413799 7.046424 -0.661335 +v 0.551996 7.129286 -0.500140 +v 0.323207 7.601523 -0.661355 +v 0.212128 7.511095 -0.804637 +v 0.100987 7.420666 -0.661403 +v 0.212066 7.511095 -0.518121 +v 0.010534 7.992572 -0.661423 +v -0.092686 7.921489 -0.786796 +v -0.195960 7.850405 -0.661467 +v -0.092740 7.921489 -0.536094 +v -0.281761 8.417666 -0.660948 +v -0.380679 8.371165 -0.766499 +v -0.452878 8.287690 -0.662061 +v -0.353961 8.334191 -0.556510 +v -0.613861 8.753545 -0.448106 +v -0.703995 8.724291 -0.532091 +v -0.750303 8.637641 -0.452210 +v -0.660168 8.666895 -0.368225 +v -0.919385 9.097373 -0.252534 +v -0.994612 9.078263 -0.317627 +v -1.040897 9.021661 -0.247519 +v -0.965670 9.040771 -0.182425 +v -1.126573 9.529469 -0.122677 +v -1.184577 9.518624 -0.170531 +v -1.227870 9.495061 -0.112716 +v -1.169866 9.505906 -0.064862 +v -1.252755 10.017161 -0.096544 +v -1.291806 10.011465 -0.128291 +v -1.322807 10.004334 -0.088877 +v -1.283756 10.010031 -0.057130 +v -1.339077 10.519033 -0.079035 +v -1.358587 10.516074 -0.094908 +v -1.374462 10.515043 -0.075204 +v -1.354953 10.518003 -0.059331 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v -1.406505 11.022470 -0.135415 +v 0.946819 7.783953 -0.895764 +v 0.874971 7.745834 -0.798716 +v 0.978696 7.707715 -0.736897 +v 1.050544 7.745834 -0.833945 +v 0.963115 8.072925 -0.814550 +v 0.898452 8.038618 -0.727207 +v 0.991804 8.004312 -0.671570 +v 1.056467 8.038618 -0.758913 +v 1.001987 8.330740 -0.620822 +v 0.942236 8.282845 -0.554510 +v 1.022944 8.234949 -0.516381 +v 1.082695 8.282845 -0.582693 +v 1.048229 8.530135 -0.392279 +v 0.998167 8.494981 -0.328135 +v 1.064851 8.441104 -0.305619 +v 1.114912 8.476258 -0.369763 +v 1.208482 8.731099 -0.222913 +v 1.169614 8.706317 -0.162521 +v 1.217148 8.647399 -0.156106 +v 1.256016 8.672181 -0.216498 +v 1.405373 8.843890 -0.017204 +v 1.372052 8.822441 0.032172 +v 1.409448 8.771447 0.035258 +v 1.442770 8.792896 -0.014118 +v 1.576995 9.008658 0.162401 +v 1.548611 8.989715 0.199828 +v 1.583823 8.954394 0.208655 +v 1.612207 8.973338 0.171228 +v 1.671997 9.189566 0.377378 +v 1.651044 9.176027 0.406026 +v 1.681245 9.157101 0.419170 +v 1.702197 9.170639 0.390522 +v 1.725197 9.453602 0.498149 +v 1.711750 9.447270 0.518653 +v 1.733110 9.440987 0.530720 +v 1.746556 9.447318 0.510216 +v 1.723698 9.736523 0.595503 +v 1.717067 9.735612 0.606252 +v 1.727854 9.735098 0.612863 +v 1.734485 9.736009 0.602115 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 1.727321 10.035175 0.563124 +v 0.029698 7.145856 -1.335827 +v 0.173249 7.017569 -1.272730 +v 0.124041 6.889281 -1.421614 +v -0.019509 7.017569 -1.484711 +v 0.358482 7.473966 -1.634795 +v 0.487677 7.358507 -1.578008 +v 0.443390 7.243048 -1.712004 +v 0.314195 7.358507 -1.768791 +v 0.790030 7.615906 -2.027210 +v 0.874791 7.501768 -1.949381 +v 0.805346 7.387630 -2.041137 +v 0.720585 7.501768 -2.118965 +v 1.215653 7.556913 -2.414236 +v 1.274499 7.457312 -2.332206 +v 1.198416 7.357710 -2.398562 +v 1.139569 7.457312 -2.480592 +v 1.637963 7.439081 -2.824273 +v 1.694598 7.346976 -2.768725 +v 1.587883 7.306709 -2.726690 +v 1.531248 7.398815 -2.782238 +v 1.143879 7.156472 -2.964077 +v 1.165209 7.059395 -2.944516 +v 1.135191 7.072125 -2.848608 +v 1.113860 7.169201 -2.868169 +v 0.623843 7.129411 -3.096046 +v 0.605196 7.050758 -3.090270 +v 0.585864 7.061071 -3.012249 +v 0.604511 7.139724 -3.018026 +v 0.141072 7.358492 -3.218096 +v 0.107268 7.307984 -3.217588 +v 0.103446 7.311150 -3.157012 +v 0.137251 7.361659 -3.157520 +v -0.281500 7.711366 -3.162776 +v -0.312181 7.684901 -3.162498 +v -0.310111 7.682925 -3.122080 +v -0.279429 7.709390 -3.122358 +v -0.583876 8.168916 -3.120630 +v -0.602268 8.160424 -3.120326 +v -0.602099 8.160783 -3.100070 +v -0.583707 8.169274 -3.100374 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v -0.755993 8.693449 -3.156226 +v 0.094257 7.966857 -1.385411 +v 0.181835 7.917929 -1.399463 +v 0.141800 7.869000 -1.478613 +v 0.054222 7.917929 -1.464561 +v 0.203973 8.222988 -1.600493 +v 0.282793 8.178952 -1.613140 +v 0.246762 8.134916 -1.684375 +v 0.167941 8.178952 -1.671728 +v 0.319819 8.476004 -1.827593 +v 0.387587 8.432080 -1.834337 +v 0.353265 8.388157 -1.893159 +v 0.285497 8.432080 -1.886415 +v 0.454785 8.667295 -2.092062 +v 0.506842 8.619264 -2.088707 +v 0.483721 8.589992 -2.149011 +v 0.431664 8.638022 -2.152367 +v 0.719864 8.870164 -2.185085 +v 0.759488 8.824440 -2.179309 +v 0.751390 8.810035 -2.237799 +v 0.711766 8.855759 -2.243574 +v 0.977946 9.082851 -2.276656 +v 1.016552 9.050196 -2.273750 +v 1.011564 9.039907 -2.323092 +v 0.972957 9.072563 -2.325998 +v 1.162194 9.361288 -2.343512 +v 1.199976 9.346658 -2.342932 +v 1.200005 9.345127 -2.383423 +v 1.162223 9.359757 -2.384003 +v 1.225974 9.698651 -2.308956 +v 1.255983 9.693899 -2.308307 +v 1.257100 9.696826 -2.338534 +v 1.227091 9.701578 -2.339183 +v 1.278682 10.044031 -2.282729 +v 1.298890 10.045264 -2.281969 +v 1.299590 10.046249 -2.302192 +v 1.279382 10.045016 -2.302952 +v 1.193226 10.384220 -2.286871 +v 1.203143 10.386244 -2.286457 +v 1.203546 10.386343 -2.296578 +v 1.193629 10.384319 -2.296992 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.148583 10.733781 -2.291321 +v 1.689422 6.966218 -0.112815 +v 1.847219 6.912148 -0.227803 +v 1.720469 6.858077 -0.376316 +v 1.562672 6.912148 -0.261329 +v 1.715023 7.389741 -0.330098 +v 1.857041 7.341077 -0.433587 +v 1.742965 7.292414 -0.567249 +v 1.600948 7.341077 -0.463760 +v 1.734649 7.838409 -0.496665 +v 1.860702 7.791464 -0.587087 +v 1.759116 7.744520 -0.704330 +v 1.633064 7.791464 -0.613908 +v 1.764973 8.264867 -0.754035 +v 1.873975 8.204966 -0.822173 +v 1.783794 8.145064 -0.913778 +v 1.674792 8.204966 -0.845641 +v 1.804141 8.605612 -1.096833 +v 1.895765 8.569908 -1.168294 +v 1.821593 8.491507 -1.224223 +v 1.729969 8.527210 -1.152761 +v 1.550384 8.882241 -1.375201 +v 1.616406 8.871729 -1.451306 +v 1.558803 8.798558 -1.491172 +v 1.492780 8.809071 -1.415067 +v 1.337108 9.225039 -1.612843 +v 1.389184 9.217791 -1.674510 +v 1.337935 9.167332 -1.711856 +v 1.285859 9.174580 -1.650189 +v 1.148617 9.590683 -1.826086 +v 1.181483 9.596766 -1.876850 +v 1.138415 9.567541 -1.908236 +v 1.105549 9.561458 -1.857472 +v 0.926484 9.998642 -1.808439 +v 0.947114 10.005916 -1.842547 +v 0.914078 9.997292 -1.864367 +v 0.893449 9.990018 -1.830259 +v 0.890346 10.471495 -1.817919 +v 0.900807 10.474415 -1.835021 +v 0.883635 10.473310 -1.845714 +v 0.873174 10.470390 -1.828611 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 0.804714 10.933186 -1.747385 +v 2.047802 7.761458 -0.336647 +v 1.975832 7.749784 -0.266324 +v 2.047118 7.738110 -0.195306 +v 2.119088 7.749784 -0.265630 +v 2.047419 8.083793 -0.257494 +v 1.982646 8.073286 -0.194203 +v 2.046803 8.062779 -0.130287 +v 2.111576 8.073286 -0.193578 +v 2.047214 8.407493 -0.215221 +v 1.989635 8.402786 -0.158389 +v 2.046661 8.398080 -0.101003 +v 2.104240 8.402786 -0.157834 +v 2.047155 8.740693 -0.189114 +v 1.996760 8.736007 -0.139450 +v 2.046540 8.726703 -0.089816 +v 2.096934 8.731389 -0.139480 +v 2.078338 9.071297 -0.105906 +v 2.034596 9.061988 -0.064747 +v 2.075778 9.039640 -0.026034 +v 2.119520 9.048949 -0.067193 +v 2.147310 9.348683 0.069060 +v 2.110612 9.339578 0.102759 +v 2.144339 9.317718 0.133582 +v 2.181038 9.326823 0.099882 +v 2.194560 9.643855 0.191252 +v 2.165834 9.641214 0.219707 +v 2.194242 9.634187 0.247733 +v 2.222968 9.636827 0.219278 +v 2.195631 9.972488 0.189283 +v 2.174073 9.970064 0.210564 +v 2.195487 9.968187 0.232045 +v 2.217046 9.970612 0.210764 +v 2.185815 10.294212 0.270957 +v 2.171466 10.293852 0.285255 +v 2.185732 10.292042 0.299526 +v 2.200081 10.292402 0.285227 +v 2.228588 10.621202 0.253039 +v 2.221428 10.620213 0.260137 +v 2.228540 10.620466 0.267346 +v 2.235700 10.621456 0.260248 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 2.129869 10.931916 0.317966 +v 0.529496 8.316685 0.391202 +v 0.592359 8.292812 0.355841 +v 0.550323 8.268940 0.297230 +v 0.487461 8.292812 0.332592 +v 0.560162 8.646173 0.252839 +v 0.616738 8.624688 0.221014 +v 0.578907 8.603203 0.168265 +v 0.522330 8.624688 0.200090 +v 0.601833 8.963037 0.064823 +v 0.650745 8.934495 0.042752 +v 0.615739 8.905953 0.002082 +v 0.566827 8.934495 0.024153 +v 0.665885 9.181393 -0.224174 +v 0.707440 9.151166 -0.237879 +v 0.675567 9.120939 -0.267858 +v 0.634012 9.151166 -0.254153 +v 0.730270 9.383074 -0.506154 +v 0.763189 9.373034 -0.536046 +v 0.737052 9.340174 -0.553793 +v 0.704133 9.350213 -0.523901 +v 0.441567 9.556203 -0.608087 +v 0.456325 9.560445 -0.642832 +v 0.439186 9.528443 -0.654019 +v 0.424428 9.524201 -0.619274 +v 0.159971 9.749408 -0.709650 +v 0.172390 9.752301 -0.737234 +v 0.154057 9.730477 -0.747777 +v 0.141638 9.727584 -0.720192 +v -0.038994 10.033573 -0.782975 +v -0.030844 10.037202 -0.803948 +v -0.048264 10.025434 -0.812754 +v -0.056414 10.021806 -0.791780 +v -0.220756 10.339454 -0.763543 +v -0.215386 10.342002 -0.777527 +v -0.228679 10.337609 -0.783432 +v -0.234049 10.335061 -0.769449 +v -0.274997 10.693794 -0.761475 +v -0.272054 10.693522 -0.768474 +v -0.279059 10.693478 -0.771417 +v -0.282001 10.693749 -0.764418 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v -0.218810 11.046441 -0.798456 +v 2.302005 7.810725 0.680864 +v 2.334227 7.761965 0.729405 +v 2.346303 7.713205 0.672408 +v 2.314081 7.761965 0.623867 +v 2.597065 7.953778 0.624541 +v 2.626065 7.909894 0.668228 +v 2.636934 7.866009 0.616931 +v 2.607934 7.909894 0.573244 +v 2.900662 8.080722 0.566589 +v 2.925429 8.041254 0.605614 +v 2.934080 8.001786 0.560210 +v 2.909313 8.041254 0.521184 +v 3.202771 8.207875 0.508911 +v 3.208245 8.166563 0.541950 +v 3.232086 8.138839 0.503334 +v 3.226612 8.180151 0.470294 +v 3.432664 8.280716 0.741462 +v 3.422684 8.240501 0.760466 +v 3.454189 8.220362 0.734394 +v 3.464170 8.260576 0.715390 +v 3.664037 8.306132 0.976351 +v 3.658044 8.273344 0.994572 +v 3.685462 8.256923 0.974039 +v 3.691455 8.289711 0.955819 +v 3.871397 8.436835 1.185480 +v 3.871907 8.414977 1.206587 +v 3.899549 8.406547 1.197188 +v 3.899040 8.428405 1.176081 +v 3.925925 8.692723 1.379459 +v 3.927754 8.680120 1.398362 +v 3.950232 8.678370 1.395019 +v 3.948402 8.690973 1.376117 +v 3.973273 8.975332 1.543218 +v 3.974943 8.970798 1.557625 +v 3.990015 8.970377 1.555744 +v 3.988345 8.974911 1.541338 +v 3.974844 9.304403 1.573959 +v 3.975764 9.304647 1.581496 +v 3.983305 9.304594 1.580577 +v 3.982385 9.304350 1.573040 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 3.983648 9.633586 1.527805 +v 0.659282 8.268538 -0.484583 +v 0.589586 8.241809 -0.470441 +v 0.613431 8.215080 -0.403441 +v 0.683128 8.241809 -0.417583 +v 0.601104 8.595416 -0.381626 +v 0.538377 8.571361 -0.368898 +v 0.559838 8.547305 -0.308598 +v 0.622565 8.571361 -0.321326 +v 0.485500 8.862021 -0.177043 +v 0.431328 8.835809 -0.168535 +v 0.451989 8.809596 -0.117740 +v 0.506161 8.835809 -0.126249 +v 0.386508 9.145262 -0.001860 +v 0.338843 9.123042 0.006054 +v 0.356657 9.100822 0.050967 +v 0.404322 9.123042 0.043054 +v 0.276544 9.421505 0.191593 +v 0.240607 9.393464 0.191995 +v 0.255821 9.374519 0.230564 +v 0.291758 9.402560 0.230162 +v 0.029355 9.597116 0.369884 +v 0.003494 9.569469 0.366741 +v 0.014864 9.555053 0.399996 +v 0.040725 9.582699 0.403139 +v -0.190923 9.810068 0.528775 +v -0.214202 9.790545 0.528105 +v -0.206456 9.780363 0.555671 +v -0.183178 9.799887 0.556341 +v -0.380694 10.063818 0.665707 +v -0.401078 10.053824 0.667741 +v -0.395278 10.046204 0.688424 +v -0.374894 10.056197 0.686390 +v -0.444652 10.368664 0.814281 +v -0.459326 10.365984 0.817174 +v -0.455823 10.362236 0.831476 +v -0.441149 10.364916 0.828584 +v -0.466995 10.710909 0.864362 +v -0.474407 10.710546 0.865992 +v -0.472752 10.709942 0.873383 +v -0.465340 10.710305 0.871753 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v -0.470695 11.058674 0.884086 +v 0.596185 8.523317 0.560098 +v 0.594314 8.503343 0.513591 +v 0.548948 8.483368 0.523994 +v 0.550818 8.503343 0.570501 +v 0.476244 8.825615 0.468427 +v 0.474561 8.807638 0.426571 +v 0.433731 8.789661 0.435934 +v 0.435414 8.807638 0.477790 +v 0.291663 9.079924 0.327352 +v 0.292980 9.059646 0.292297 +v 0.259499 9.039368 0.302770 +v 0.258183 9.059646 0.337825 +v 0.090470 9.299834 0.174807 +v 0.094585 9.275817 0.149054 +v 0.059589 9.270144 0.148752 +v 0.055473 9.294162 0.174505 +v 0.224327 9.485454 -0.068647 +v 0.226493 9.459579 -0.084438 +v 0.199047 9.464625 -0.096472 +v 0.196881 9.490499 -0.080681 +v 0.370896 9.628853 -0.336794 +v 0.373710 9.608617 -0.351758 +v 0.350642 9.612564 -0.361434 +v 0.347828 9.632800 -0.346470 +v 0.483989 9.866977 -0.544896 +v 0.488490 9.856349 -0.561547 +v 0.469081 9.857146 -0.567302 +v 0.464580 9.867774 -0.550651 +v 0.485337 10.181490 -0.664457 +v 0.489184 10.178098 -0.678760 +v 0.474485 10.177311 -0.682527 +v 0.470638 10.180703 -0.668224 +v 0.484580 10.516426 -0.703822 +v 0.487140 10.515536 -0.713582 +v 0.477340 10.515173 -0.716120 +v 0.474780 10.516063 -0.706360 +v 0.473181 10.852963 -0.734048 +v 0.474458 10.852940 -0.738949 +v 0.469557 10.852923 -0.740226 +v 0.468280 10.852947 -0.735325 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v 0.479658 11.190399 -0.713659 +v -0.309383 8.507997 1.197018 +v -0.320630 8.486515 1.152550 +v -0.361548 8.465034 1.173277 +v -0.350301 8.486515 1.217745 +v -0.449703 8.763294 1.133155 +v -0.459825 8.743960 1.093134 +v -0.496652 8.724627 1.111788 +v -0.486530 8.743960 1.151809 +v -0.639906 8.980348 1.046590 +v -0.647598 8.961398 1.011610 +v -0.679027 8.942449 1.028786 +v -0.671335 8.961398 1.063766 +v -0.817986 9.211037 0.965543 +v -0.822107 9.191685 0.936123 +v -0.846999 9.172333 0.952339 +v -0.842877 9.191685 0.981759 +v -1.063148 9.353772 0.853112 +v -1.058425 9.331198 0.833322 +v -1.079586 9.314485 0.847336 +v -1.084310 9.337059 0.867126 +v -1.228797 9.427723 0.614403 +v -1.221423 9.407059 0.601756 +v -1.241366 9.394375 0.610853 +v -1.248739 9.415039 0.623500 +v -1.389268 9.518827 0.382983 +v -1.385029 9.503479 0.370456 +v -1.402002 9.494059 0.376254 +v -1.406241 9.509407 0.388782 +v -1.526435 9.689275 0.184265 +v -1.528674 9.682912 0.170650 +v -1.539309 9.673856 0.176631 +v -1.537070 9.680219 0.190246 +v -1.748999 9.862086 0.276701 +v -1.753703 9.861311 0.267763 +v -1.760104 9.854529 0.271720 +v -1.755399 9.855305 0.280658 +v -1.893280 10.115862 0.335334 +v -1.895284 10.114972 0.330769 +v -1.899206 10.112623 0.332948 +v -1.897202 10.113513 0.337514 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v -2.045922 10.370658 0.302226 +v 0.760364 8.469772 -0.722907 +v 0.800667 8.447762 -0.701540 +v 0.812064 8.425753 -0.745710 +v 0.771761 8.447762 -0.767077 +v 0.946760 8.703380 -0.805118 +v 0.983033 8.683571 -0.785887 +v 0.993291 8.663762 -0.825640 +v 0.957018 8.683571 -0.844871 +v 1.114468 8.954841 -0.879086 +v 1.145820 8.936049 -0.861599 +v 1.154048 8.917258 -0.896543 +v 1.122696 8.936049 -0.914029 +v 1.325203 9.167941 -0.971365 +v 1.343969 9.142981 -0.954577 +v 1.354892 9.130198 -0.985791 +v 1.336125 9.155159 -1.002579 +v 1.584534 9.309825 -0.865660 +v 1.589327 9.282205 -0.853927 +v 1.603063 9.273660 -0.879653 +v 1.598271 9.301280 -0.891386 +v 1.871167 9.352959 -0.747823 +v 1.871616 9.329037 -0.739526 +v 1.881966 9.321636 -0.761422 +v 1.881517 9.345558 -0.769719 +v 2.150855 9.395711 -0.634749 +v 2.149706 9.376191 -0.629447 +v 2.167442 9.372666 -0.638583 +v 2.168591 9.392186 -0.643885 +v 2.105310 9.444156 -0.339102 +v 2.104828 9.430180 -0.333159 +v 2.119864 9.430575 -0.331008 +v 2.120347 9.444551 -0.336951 +v 2.070197 9.623615 -0.092818 +v 2.069180 9.615827 -0.086422 +v 2.078715 9.617165 -0.083276 +v 2.079732 9.624953 -0.089672 +v 1.915945 9.816662 0.091619 +v 1.915205 9.813139 0.095183 +v 1.919578 9.814444 0.097381 +v 1.920318 9.817966 0.093817 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 1.775589 10.035369 0.260129 +v 2.428249 8.050692 -0.247252 +v 2.446908 8.021605 -0.210222 +v 2.469964 7.992519 -0.244686 +v 2.451305 8.021605 -0.281716 +v 2.688823 8.264523 -0.231225 +v 2.705616 8.238345 -0.197898 +v 2.726366 8.212168 -0.228915 +v 2.709573 8.238345 -0.262242 +v 2.978799 8.438157 -0.213389 +v 2.993343 8.414618 -0.183789 +v 3.011405 8.391078 -0.211384 +v 2.996861 8.414618 -0.240984 +v 3.248831 8.644894 -0.196780 +v 3.259011 8.622743 -0.171037 +v 3.272268 8.600592 -0.195339 +v 3.262089 8.622743 -0.221083 +v 3.571638 8.745097 -0.177025 +v 3.594481 8.733276 -0.160838 +v 3.591310 8.706912 -0.175616 +v 3.568467 8.718733 -0.191803 +v 3.547139 8.778490 -0.507798 +v 3.571764 8.773235 -0.510510 +v 3.566148 8.748819 -0.514205 +v 3.541523 8.754074 -0.511493 +v 3.524899 8.848556 -0.833824 +v 3.544514 8.844712 -0.837127 +v 3.539631 8.826850 -0.845347 +v 3.520015 8.830693 -0.842045 +v 3.507062 9.055272 -1.097330 +v 3.521537 9.050650 -1.097410 +v 3.518380 9.040959 -1.108680 +v 3.503905 9.045582 -1.108600 +v 3.671027 9.296468 -1.266225 +v 3.680238 9.292311 -1.265514 +v 3.679100 9.288217 -1.274710 +v 3.669890 9.292374 -1.275421 +v 3.778123 9.595060 -1.376714 +v 3.783121 9.594244 -1.376790 +v 3.782887 9.593269 -1.381755 +v 3.777889 9.594086 -1.381679 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 3.777413 9.931176 -1.400665 +v 0.712311 8.493072 -0.525883 +v 0.668236 8.469649 -0.534491 +v 0.671942 8.446227 -0.489736 +v 0.716018 8.469649 -0.481128 +v 0.566221 8.790818 -0.395071 +v 0.526553 8.769738 -0.402818 +v 0.529889 8.748658 -0.362539 +v 0.569557 8.769738 -0.354792 +v 0.362330 9.025316 -0.212504 +v 0.328561 9.004486 -0.220726 +v 0.333018 8.983656 -0.186257 +v 0.366787 9.004486 -0.178035 +v 0.175063 9.277113 -0.044727 +v 0.146854 9.257257 -0.052909 +v 0.148211 9.242128 -0.020873 +v 0.176421 9.261985 -0.012691 +v -0.068662 9.522027 0.045824 +v -0.090819 9.502817 0.037850 +v -0.091451 9.491794 0.066162 +v -0.069294 9.511003 0.074136 +v -0.316205 9.759875 0.137763 +v -0.336056 9.745397 0.131628 +v -0.337379 9.737088 0.155514 +v -0.317528 9.751567 0.161650 +v -0.509524 10.048138 0.209925 +v -0.525928 10.037249 0.205150 +v -0.529022 10.033302 0.224780 +v -0.512618 10.044191 0.229554 +v -0.720255 10.334282 0.194644 +v -0.732770 10.326441 0.191069 +v -0.736151 10.325111 0.205823 +v -0.723636 10.332952 0.209398 +v -0.884620 10.648896 0.183413 +v -0.893502 10.644741 0.180872 +v -0.896702 10.645738 0.190432 +v -0.887821 10.649893 0.192972 +v -0.978511 10.964027 0.047634 +v -0.983148 10.962597 0.046184 +v -0.984928 10.963686 0.050799 +v -0.980291 10.965117 0.052249 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v -1.029498 11.310193 -0.023038 +v 1.184975 2.782948 -1.117181 +v 1.420842 2.502403 -0.851126 +v 1.482200 2.221859 -1.201346 +v 1.246333 2.502403 -1.467400 +v 1.708618 3.115178 -1.265460 +v 1.910790 2.874711 -1.037413 +v 1.963382 2.634244 -1.337601 +v 1.761210 2.874711 -1.565648 +v 2.294968 3.313498 -1.431495 +v 2.469702 3.116829 -1.243228 +v 2.519787 2.920161 -1.495157 +v 2.345052 3.116829 -1.683424 +v 2.747511 3.636513 -1.559641 +v 2.935119 3.522524 -1.422569 +v 3.023008 3.408535 -1.637653 +v 2.835400 3.522524 -1.774725 +v 3.040486 4.158789 -1.642602 +v 3.196022 4.097458 -1.543997 +v 3.276767 4.036127 -1.709510 +v 3.121232 4.097458 -1.808115 +v 3.357188 4.709202 -1.732282 +v 3.461642 4.669943 -1.666762 +v 3.516236 4.630685 -1.777319 +v 3.411782 4.669943 -1.842840 +v 3.644566 5.263365 -1.813658 +v 3.700425 5.255677 -1.781926 +v 3.731354 5.247990 -1.838234 +v 3.675495 5.255677 -1.869966 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 3.637604 5.894843 -1.811687 +v 2.662767 3.651675 -0.575894 +v 2.543661 3.561877 -0.364402 +v 2.769465 3.472079 -0.275364 +v 2.888571 3.561877 -0.486856 +v 2.818727 4.108343 -0.136611 +v 2.729397 4.040995 0.022008 +v 2.898750 3.973646 0.088787 +v 2.988080 4.040995 -0.069832 +v 2.891797 4.670982 0.069202 +v 2.835645 4.653908 0.184529 +v 2.951949 4.636834 0.238628 +v 3.008101 4.653908 0.123302 +v 2.922423 5.291266 0.157396 +v 2.895657 5.298856 0.215810 +v 2.954220 5.295383 0.243095 +v 2.980986 5.287794 0.184681 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.045599 5.906944 0.047816 +v 3.225182 4.749248 -0.432445 +v 3.349042 4.712869 -0.441386 +v 3.329504 4.676491 -0.564023 +v 3.205644 4.712869 -0.555081 +v 3.445533 5.290963 -0.710364 +v 3.507463 5.272774 -0.714835 +v 3.497694 5.254584 -0.776153 +v 3.435764 5.272774 -0.771682 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 3.592556 5.883819 -0.895798 +v 2.910038 5.304496 0.166065 +v 2.903074 5.293325 0.229412 +v 2.966606 5.282154 0.234426 +v 2.973569 5.293325 0.171079 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v 3.038156 5.915216 0.320893 +v -0.445736 4.886012 -1.509105 +v -0.184516 4.677549 -1.655035 +v -0.438894 4.469087 -1.812589 +v -0.700114 4.677549 -1.666659 +v -0.432942 5.145362 -2.076605 +v -0.215259 4.971643 -2.198213 +v -0.427241 4.797924 -2.329508 +v -0.644924 4.971643 -2.207900 +v -0.423100 5.502331 -2.513180 +v -0.248164 5.397474 -2.645498 +v -0.416959 5.292617 -2.785565 +v -0.591895 5.397474 -2.653247 +v -0.416029 5.985376 -2.826817 +v -0.284427 5.938011 -2.943797 +v -0.410623 5.890646 -3.066590 +v -0.542226 5.938011 -2.949609 +v -0.411823 6.544295 -3.013387 +v -0.323962 6.535885 -3.096970 +v -0.407967 6.527476 -3.184428 +v -0.495828 6.535885 -3.100845 +v -0.411605 7.150869 -3.023064 +v -0.367670 7.151961 -3.065048 +v -0.409668 7.153052 -3.108969 +v -0.453603 7.151961 -3.066986 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v -0.410601 7.768912 -3.067597 +v 0.573046 5.714266 -2.843167 +v 0.585932 5.595132 -2.705733 +v 0.668033 5.475999 -2.816700 +v 0.655147 5.595132 -2.954134 +v 1.157891 5.852644 -2.680204 +v 1.166481 5.773222 -2.588581 +v 1.221215 5.693800 -2.662559 +v 1.212625 5.773222 -2.754182 +v 1.693610 6.102386 -2.530930 +v 1.701855 6.064631 -2.484018 +v 1.733172 6.026877 -2.519906 +v 1.724927 6.064631 -2.566818 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 2.233703 6.362772 -2.380437 +v 0.501580 6.762317 -3.240487 +v 0.558646 6.742043 -3.245638 +v 0.546391 6.721769 -3.301610 +v 0.489325 6.742043 -3.296459 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 0.696062 7.286038 -3.505762 +v 1.464608 6.718002 0.030341 +v 1.677080 6.531796 0.005191 +v 1.499726 6.345590 -0.114486 +v 1.287254 6.531796 -0.089335 +v 1.574416 6.967800 -0.422507 +v 1.756535 6.808194 -0.444065 +v 1.604517 6.648589 -0.546645 +v 1.422399 6.808194 -0.525087 +v 1.702347 7.059380 -0.950092 +v 1.851303 6.922204 -0.956471 +v 1.721812 6.785029 -1.030369 +v 1.572856 6.922204 -1.023990 +v 1.817018 7.216823 -1.422995 +v 1.940523 7.114418 -1.445995 +v 1.841270 7.012013 -1.523010 +v 1.717765 7.114418 -1.500010 +v 1.921842 7.462319 -1.855289 +v 2.018889 7.398288 -1.890760 +v 1.948868 7.334256 -1.966743 +v 1.851821 7.398288 -1.931272 +v 2.002957 7.850785 -2.189806 +v 2.069206 7.815069 -2.219852 +v 2.024077 7.779354 -2.276905 +v 1.957828 7.815069 -2.246859 +v 2.086420 8.248537 -2.534007 +v 2.119668 8.231360 -2.549541 +v 2.097228 8.214184 -2.578578 +v 2.063979 8.231360 -2.563044 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.163949 8.667300 -2.853736 +v 2.396074 6.937310 -1.315769 +v 2.510641 6.822705 -1.312716 +v 2.396104 6.708099 -1.316753 +v 2.281538 6.822705 -1.319806 +v 2.412519 6.873796 -1.847148 +v 2.498444 6.787842 -1.844858 +v 2.412542 6.701888 -1.847886 +v 2.326617 6.787842 -1.850176 +v 2.428714 6.884007 -2.370443 +v 2.486237 6.827268 -2.376681 +v 2.429209 6.770528 -2.386465 +v 2.371686 6.827268 -2.380227 +v 2.445713 6.962549 -2.887565 +v 2.473110 6.938450 -2.905186 +v 2.444462 6.910498 -2.911498 +v 2.417066 6.934597 -2.893877 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 2.220000 7.243277 -3.272301 +v 3.025894 7.531799 -1.727294 +v 3.098179 7.495318 -1.730677 +v 3.076536 7.458837 -1.799727 +v 3.004252 7.495318 -1.796345 +v 3.245503 7.905062 -2.041403 +v 3.281645 7.886821 -2.043094 +v 3.270824 7.868581 -2.077620 +v 3.234682 7.886821 -2.075929 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 3.439239 8.315601 -2.318506 +v 2.448165 6.964871 -2.902332 +v 2.464372 6.936523 -2.878341 +v 2.442011 6.908175 -2.896731 +v 2.425804 6.936523 -2.920722 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 2.834857 6.859176 -3.254236 +v 1.382230 8.028999 -0.371169 +v 1.477291 8.004252 -0.299563 +v 1.544719 7.979505 -0.397631 +v 1.449658 8.004252 -0.469237 +v 1.559824 8.324148 -0.400091 +v 1.639042 8.303526 -0.340419 +v 1.695232 8.282904 -0.422143 +v 1.616015 8.303526 -0.481814 +v 1.597120 8.641093 -0.406165 +v 1.662768 8.644842 -0.358798 +v 1.709994 8.648591 -0.424547 +v 1.644346 8.644842 -0.471914 +v 1.541438 8.977038 -0.397096 +v 1.590677 8.979794 -0.361572 +v 1.626100 8.982549 -0.410884 +v 1.576861 8.979794 -0.446409 +v 1.582447 9.322554 -0.403775 +v 1.615292 9.321039 -0.380095 +v 1.638926 9.319525 -0.412973 +v 1.606081 9.321039 -0.436653 +v 1.605646 9.660290 -0.407553 +v 1.621781 9.663257 -0.395666 +v 1.633312 9.666224 -0.412058 +v 1.617176 9.663257 -0.423945 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.474584 9.972515 -0.386211 +v 1.774368 8.440707 -1.278875 +v 1.793990 8.398030 -1.317447 +v 1.765925 8.355353 -1.284505 +v 1.746302 8.398030 -1.245934 +v 1.488498 8.409446 -1.469506 +v 1.501580 8.380995 -1.495220 +v 1.482869 8.352544 -1.473259 +v 1.469788 8.380995 -1.447545 +v 1.216060 8.491385 -1.651179 +v 1.220422 8.477722 -1.665489 +v 1.208888 8.464060 -1.655962 +v 1.204526 8.477722 -1.641652 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 0.942550 8.586967 -1.833567 +v 1.698394 8.993629 -1.611642 +v 1.714745 8.982831 -1.616790 +v 1.703532 8.972033 -1.629756 +v 1.687181 8.982831 -1.624608 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v 1.771379 9.207788 -1.868949 +v -1.168225 3.794578 -1.433837 +v -1.290278 3.468807 -1.740820 +v -1.243181 3.143036 -1.413838 +v -1.121128 3.468807 -1.106855 +v -1.797948 3.844119 -1.265819 +v -1.902565 3.564887 -1.528948 +v -1.862196 3.285655 -1.248677 +v -1.757580 3.564887 -0.985549 +v -2.390054 3.846509 -1.107838 +v -2.519194 3.623229 -1.315917 +v -2.527513 3.399950 -1.071163 +v -2.398373 3.623229 -0.863084 +v -2.914153 4.114684 -0.968002 +v -3.052567 3.952044 -1.125100 +v -3.094324 3.789404 -0.919931 +v -2.955910 3.952044 -0.762834 +v -3.475673 4.387926 -0.818182 +v -3.590261 4.273058 -0.933130 +v -3.632357 4.158190 -0.776377 +v -3.517768 4.273058 -0.661430 +v -3.956363 4.755729 -0.689929 +v -4.054543 4.701711 -0.760747 +v -4.104394 4.647694 -0.650432 +v -4.006215 4.701711 -0.579614 +v -4.215690 5.316619 -0.620737 +v -4.272609 5.310055 -0.654057 +v -4.305364 5.303490 -0.596811 +v -4.248445 5.310055 -0.563491 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -4.202446 5.960598 -0.624270 +v -1.876244 4.245808 -3.114578 +v -1.796532 4.066024 -3.292381 +v -1.957679 3.886241 -3.182839 +v -2.037391 4.066024 -3.005037 +v -2.385691 4.249957 -3.541610 +v -2.325907 4.115119 -3.674962 +v -2.446767 3.980282 -3.592807 +v -2.506551 4.115119 -3.459455 +v -2.808492 4.498631 -3.896014 +v -2.795532 4.428032 -4.007460 +v -2.903002 4.357434 -3.975235 +v -2.915962 4.428032 -3.863789 +v -3.120749 4.974898 -4.156797 +v -3.120754 4.951265 -4.218721 +v -3.184263 4.933549 -4.211954 +v -3.184258 4.957182 -4.150031 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -3.222525 5.575612 -4.373572 +v -2.475121 5.002790 -3.779060 +v -2.538375 4.958104 -3.886645 +v -2.636963 4.913417 -3.810121 +v -2.573710 4.958104 -3.702536 +v -2.905573 5.499219 -3.861674 +v -2.937200 5.476876 -3.915467 +v -2.986494 5.454533 -3.877205 +v -2.954867 5.476876 -3.823412 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.160321 6.092677 -3.910567 +v -3.147961 4.989501 -4.153857 +v -3.106150 4.954224 -4.191279 +v -3.157050 4.918946 -4.214894 +v -3.198862 4.954224 -4.177473 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -3.224936 5.384332 -4.670773 +v -1.921655 5.633543 -0.212453 +v -2.123318 5.439054 -0.059728 +v -1.880928 5.244566 0.012659 +v -1.679264 5.439054 -0.140066 +v -1.825695 5.857920 0.317947 +v -1.993748 5.695846 0.445218 +v -1.791756 5.533772 0.505541 +v -1.623703 5.695846 0.378270 +v -1.741857 6.136453 0.781348 +v -1.871802 6.025455 0.908023 +v -1.705711 5.914456 0.981139 +v -1.575766 6.025455 0.854464 +v -1.674264 6.535723 1.154959 +v -1.768786 6.471326 1.266194 +v -1.641281 6.406930 1.337261 +v -1.546759 6.471326 1.226025 +v -1.619065 6.997978 1.460058 +v -1.680371 6.974212 1.543664 +v -1.593658 6.950446 1.600491 +v -1.532353 6.974212 1.516885 +v -1.600504 7.552279 1.562649 +v -1.630828 7.549822 1.606270 +v -1.587143 7.547366 1.636500 +v -1.556819 7.549822 1.592880 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -1.592894 8.129701 1.604714 +v -3.237231 6.593627 -0.242536 +v -3.121005 6.513036 -0.316369 +v -3.230185 6.432445 -0.400271 +v -3.346411 6.513036 -0.326438 +v -3.213631 6.856160 -0.770855 +v -3.136147 6.802432 -0.820077 +v -3.208934 6.748704 -0.876011 +v -3.286418 6.802432 -0.826789 +v -3.199505 7.310511 -1.087107 +v -3.160341 7.298886 -1.121156 +v -3.196313 7.287261 -1.158562 +v -3.235476 7.298886 -1.124512 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.195700 7.876673 -1.172270 +v -3.639195 7.595006 -0.168512 +v -3.684244 7.568424 -0.178119 +v -3.678300 7.541842 -0.132442 +v -3.633251 7.568424 -0.122835 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v -3.960057 7.978616 0.127447 +v 0.580141 7.028418 -1.234203 +v 0.764090 6.879085 -1.308072 +v 0.598872 6.729751 -1.417602 +v 0.414924 6.879085 -1.343734 +v 0.625265 7.292235 -1.676012 +v 0.782935 7.164235 -1.739328 +v 0.641321 7.036234 -1.833211 +v 0.483650 7.164235 -1.769895 +v 0.671643 7.525213 -2.130098 +v 0.803520 7.421649 -2.187616 +v 0.685994 7.318084 -2.270606 +v 0.554116 7.421649 -2.213089 +v 0.713006 7.819535 -2.535080 +v 0.819555 7.744745 -2.591348 +v 0.726581 7.669954 -2.667994 +v 0.620032 7.744745 -2.611726 +v 0.751485 8.160961 -2.911833 +v 0.831843 8.109120 -2.958399 +v 0.762558 8.057280 -3.020249 +v 0.682201 8.109120 -2.973683 +v 0.787875 8.520566 -3.268128 +v 0.842026 8.493211 -3.304836 +v 0.796415 8.465856 -3.351734 +v 0.742264 8.493211 -3.315025 +v 0.811226 8.973371 -3.496754 +v 0.838559 8.964756 -3.517629 +v 0.816011 8.956141 -3.543598 +v 0.788678 8.964756 -3.522723 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 0.828136 9.461348 -3.662321 +v 1.531830 7.743646 -2.250914 +v 1.632867 7.644884 -2.238666 +v 1.541849 7.546122 -2.284210 +v 1.440813 7.644884 -2.296458 +v 1.681981 7.716473 -2.749892 +v 1.757758 7.642402 -2.740706 +v 1.689495 7.568330 -2.774863 +v 1.613717 7.642402 -2.784050 +v 1.819264 7.866516 -3.206111 +v 1.873455 7.821189 -3.212190 +v 1.831618 7.775862 -3.247164 +v 1.777427 7.821189 -3.241086 +v 1.949846 8.101546 -3.637728 +v 1.978631 8.085237 -3.650472 +v 1.957950 8.063464 -3.669320 +v 1.929165 8.079774 -3.656577 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 1.849189 8.459961 -3.990544 +v 2.061212 8.481051 -2.046879 +v 2.042529 8.449462 -1.986207 +v 2.105937 8.417872 -1.983129 +v 2.124621 8.449462 -2.043801 +v 2.285981 8.824026 -1.726501 +v 2.276639 8.808231 -1.696164 +v 2.308344 8.792437 -1.694625 +v 2.317685 8.808231 -1.724961 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 2.454763 9.246087 -1.485923 +v 1.954486 8.107457 -3.651166 +v 1.978222 8.082505 -3.659595 +v 1.953309 8.057553 -3.655883 +v 1.929574 8.082505 -3.647454 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v 1.829368 8.132607 -4.152524 +v -0.524194 7.744465 -3.003163 +v -0.472067 7.673132 -3.062389 +v -0.548793 7.601799 -3.044003 +v -0.600919 7.673132 -2.984776 +v -0.701685 7.844488 -3.297831 +v -0.658246 7.785044 -3.347186 +v -0.722184 7.725600 -3.331864 +v -0.765622 7.785044 -3.282509 +v -0.874973 7.944592 -3.585521 +v -0.843893 7.900042 -3.631099 +v -0.898714 7.855492 -3.624935 +v -0.929794 7.900042 -3.579357 +v -1.023555 8.137906 -3.832193 +v -1.004273 8.109869 -3.873064 +v -1.049417 8.081832 -3.875129 +v -1.068698 8.109869 -3.834258 +v -1.150106 8.388762 -4.042292 +v -1.139316 8.374631 -4.072966 +v -1.171476 8.360499 -4.077769 +v -1.182266 8.374631 -4.047095 +v -1.236847 8.700876 -4.186297 +v -1.231948 8.695484 -4.202458 +v -1.248525 8.690092 -4.205684 +v -1.253423 8.695484 -4.189523 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v -1.319668 9.020874 -4.323794 +v 0.122530 8.429044 -3.388614 +v 0.154087 8.395881 -3.415683 +v 0.113126 8.362718 -3.422805 +v 0.081570 8.395881 -3.395737 +v 0.034494 8.565729 -3.708693 +v 0.055532 8.543620 -3.726739 +v 0.028225 8.521511 -3.731487 +v 0.007187 8.543620 -3.713442 +v -0.047123 8.742347 -4.005433 +v -0.037161 8.732705 -4.016481 +v -0.051372 8.723063 -4.020881 +v -0.061333 8.732705 -4.009833 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v -0.113306 8.996885 -4.246061 +v 0.320277 9.066226 -3.434238 +v 0.337082 9.063099 -3.429541 +v 0.341237 9.059972 -3.446488 +v 0.324432 9.063099 -3.451186 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v 0.407867 9.409742 -3.485430 +v -0.438725 3.411787 2.379346 +v -0.566276 3.063119 2.049895 +v -0.367477 2.714451 2.341933 +v -0.239926 3.063119 2.671384 +v -1.081101 3.302770 2.716665 +v -1.190431 3.003911 2.434278 +v -1.020031 2.705053 2.684596 +v -0.910702 3.003911 2.966983 +v -1.709206 3.145024 3.046489 +v -1.809506 2.894995 2.815994 +v -1.676699 2.644967 3.029419 +v -1.576399 2.894995 3.259915 +v -2.321213 3.095876 3.367861 +v -2.435777 2.896765 3.201488 +v -2.363856 2.697655 3.390253 +v -2.249291 2.896765 3.556625 +v -2.941916 3.216024 3.693798 +v -3.043691 3.069967 3.577343 +v -3.005602 2.923909 3.727241 +v -2.903826 3.069967 3.843696 +v -3.567665 3.339118 4.022386 +v -3.650633 3.247625 3.952688 +v -3.640358 3.156133 4.060558 +v -3.557390 3.247625 4.130256 +v -4.110577 3.698305 4.307475 +v -4.163823 3.661280 4.278802 +v -4.170447 3.624255 4.338914 +v -4.117201 3.661280 4.367587 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -4.553818 4.227307 4.540226 +v -2.268573 2.502650 3.244987 +v -2.510533 2.364435 3.192061 +v -2.384891 2.226219 2.978613 +v -2.142931 2.364435 3.031538 +v -2.082835 1.931581 3.670330 +v -2.264306 1.827919 3.630636 +v -2.170075 1.724258 3.470550 +v -1.988604 1.827919 3.510244 +v -1.901104 1.386686 4.086501 +v -2.013968 1.301175 4.078626 +v -1.943030 1.215663 3.990490 +v -1.830166 1.301175 3.998365 +v -1.632028 1.134249 4.687912 +v -1.689291 1.096134 4.670698 +v -1.650832 1.036677 4.674414 +v -1.593569 1.074792 4.691628 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -2.189379 1.198111 5.155898 +v -3.528721 2.366931 2.252950 +v -3.495451 2.267692 2.157258 +v -3.500419 2.168453 2.258447 +v -3.533689 2.267692 2.354140 +v -4.206939 2.091548 2.121228 +v -4.190303 2.041929 2.073382 +v -4.192787 1.992309 2.123977 +v -4.209423 2.041929 2.171823 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -4.919889 2.059740 1.982761 +v -1.649546 1.129161 4.704372 +v -1.688760 1.085463 4.664612 +v -1.633314 1.041765 4.657954 +v -1.594100 1.085463 4.697714 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v -1.852498 0.725680 5.284750 +v 1.437016 5.881810 0.945045 +v 1.231297 5.797047 1.173769 +v 1.474979 5.712285 1.361528 +v 1.680697 5.797047 1.132805 +v 1.468135 6.346535 1.286442 +v 1.296703 6.275900 1.477045 +v 1.499771 6.205265 1.633511 +v 1.671202 6.275900 1.442909 +v 1.480619 6.853852 1.423408 +v 1.344355 6.834030 1.585556 +v 1.507690 6.814208 1.720395 +v 1.643955 6.834030 1.558247 +v 1.487325 7.394596 1.496980 +v 1.385194 7.402137 1.619320 +v 1.507761 7.409678 1.721177 +v 1.609893 7.402137 1.598838 +v 1.480482 7.962621 1.421907 +v 1.412406 7.960189 1.503595 +v 1.494130 7.957757 1.571628 +v 1.562206 7.960189 1.489940 +v 1.497388 8.511973 1.607375 +v 1.463346 8.509785 1.648175 +v 1.504204 8.507596 1.682148 +v 1.538246 8.509785 1.641348 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 1.493195 9.072927 1.561370 +v 2.647307 7.007507 1.210589 +v 2.774710 6.923299 1.256765 +v 2.768110 6.839091 1.121413 +v 2.640707 6.923299 1.075237 +v 3.069217 7.252843 0.899137 +v 3.154153 7.196704 0.929921 +v 3.149752 7.140566 0.839686 +v 3.064817 7.196704 0.808902 +v 3.347239 7.679296 0.693902 +v 3.396259 7.661576 0.704458 +v 3.400610 7.643856 0.654504 +v 3.351591 7.661576 0.643948 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 3.537795 8.193227 0.553235 +v 2.844253 7.966058 0.837740 +v 2.867753 7.965289 0.790038 +v 2.820046 7.964520 0.766548 +v 2.796546 7.965289 0.814250 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 2.828403 8.534503 0.791126 +v 0.425934 7.030401 0.202444 +v 0.607008 6.892642 0.103303 +v 0.437605 6.754883 -0.014677 +v 0.256532 6.892642 0.084464 +v 0.443805 7.320415 -0.130013 +v 0.599011 7.202335 -0.214991 +v 0.453809 7.084256 -0.316117 +v 0.298603 7.202335 -0.231139 +v 0.464053 7.525328 -0.506691 +v 0.594105 7.439068 -0.590783 +v 0.473817 7.352808 -0.688330 +v 0.343765 7.439068 -0.604239 +v 0.475585 7.864366 -0.721223 +v 0.580695 7.826053 -0.808379 +v 0.485534 7.787739 -0.906302 +v 0.380423 7.826053 -0.819145 +v 0.482965 8.256948 -0.858522 +v 0.562099 8.252988 -0.929483 +v 0.491028 8.249028 -1.008518 +v 0.411895 8.252988 -0.937557 +v 0.480314 8.691339 -0.809194 +v 0.533072 8.690166 -0.856557 +v 0.485695 8.688993 -0.909302 +v 0.432936 8.690166 -0.861939 +v 0.486744 9.123565 -0.928824 +v 0.513124 9.123386 -0.952511 +v 0.489436 9.123208 -0.978890 +v 0.463056 9.123386 -0.955203 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.483335 9.557910 -0.865405 +v 0.558096 7.494945 -1.089790 +v 0.643805 7.398178 -1.148121 +v 0.540498 7.301411 -1.139387 +v 0.454789 7.398178 -1.081055 +v 0.410038 7.550732 -1.507068 +v 0.474320 7.478157 -1.550817 +v 0.396840 7.405581 -1.544266 +v 0.332558 7.478157 -1.500517 +v 0.271237 7.675481 -1.898259 +v 0.311376 7.630078 -1.935076 +v 0.257008 7.584675 -1.938359 +v 0.216869 7.630078 -1.901542 +v 0.141083 7.870992 -2.262905 +v 0.160397 7.850526 -2.284473 +v 0.130781 7.835022 -2.296283 +v 0.111466 7.855487 -2.274715 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 0.201671 8.214132 -2.528439 +v 1.091745 8.038615 -1.418913 +v 1.151044 7.999913 -1.415183 +v 1.129262 7.961211 -1.470462 +v 1.069964 7.999913 -1.474193 +v 1.335419 8.214531 -1.753723 +v 1.365068 8.195180 -1.751857 +v 1.354177 8.175829 -1.779497 +v 1.324528 8.195180 -1.781362 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 1.502458 8.548554 -1.983236 +v 0.132037 7.877615 -2.276805 +v 0.150529 7.853007 -2.259212 +v 0.139826 7.828399 -2.282383 +v 0.121335 7.853007 -2.299976 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v 0.489827 7.937741 -2.533042 +v -1.327747 8.012629 0.904154 +v -1.267407 7.945326 0.848094 +v -1.349429 7.878024 0.840609 +v -1.409769 7.945326 0.896670 +v -1.422862 8.133208 0.625400 +v -1.372579 8.077123 0.578683 +v -1.440931 8.021037 0.572446 +v -1.491214 8.077123 0.619163 +v -1.512139 8.268379 0.363755 +v -1.474570 8.228665 0.318595 +v -1.531908 8.188951 0.305819 +v -1.569478 8.228665 0.350979 +v -1.582908 8.483783 0.156353 +v -1.556713 8.459954 0.116675 +v -1.601698 8.436126 0.101286 +v -1.627893 8.459954 0.140963 +v -1.644233 8.728647 -0.023372 +v -1.627962 8.718874 -0.053317 +v -1.659144 8.709101 -0.067071 +v -1.675416 8.718874 -0.037125 +v -1.666347 9.031702 -0.088180 +v -1.658527 9.031128 -0.104079 +v -1.674434 9.030554 -0.111882 +v -1.682254 9.031128 -0.095983 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.660993 9.347371 -0.072491 +v -1.410943 8.299745 1.717854 +v -1.442892 8.265351 1.692861 +v -1.437297 8.230958 1.733036 +v -1.405347 8.265351 1.758029 +v -1.680658 8.372512 1.873241 +v -1.701958 8.349583 1.856579 +v -1.698227 8.326653 1.883363 +v -1.676928 8.349583 1.900025 +v -1.915602 8.529548 2.008595 +v -1.928234 8.519399 2.001407 +v -1.928351 8.509250 2.015941 +v -1.915719 8.519399 2.023129 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -2.134155 8.721622 2.134507 +v -1.215106 8.757973 2.038816 +v -1.225812 8.749043 2.049765 +v -1.211874 8.740112 2.056109 +v -1.201168 8.749043 2.045161 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v -1.171938 8.971903 2.269866 +v 1.534648 5.169812 2.245611 +v 1.314924 4.944189 2.194286 +v 1.535486 4.718566 2.241882 +v 1.755210 4.944189 2.293208 +v 1.385326 5.207073 2.910216 +v 1.196991 5.013682 2.866223 +v 1.386044 4.820291 2.907020 +v 1.574379 5.013682 2.951013 +v 1.240748 5.092696 3.553707 +v 1.079338 4.932655 3.536916 +v 1.232418 4.772614 3.590783 +v 1.393828 4.932655 3.607574 +v 1.106853 5.289318 4.149652 +v 0.969988 5.170684 4.170652 +v 1.084716 5.052050 4.248179 +v 1.221581 5.170684 4.227179 +v 0.974231 5.542482 4.739928 +v 0.866221 5.468549 4.779541 +v 0.946906 5.394616 4.861549 +v 1.054915 5.468549 4.821937 +v 0.885761 6.056892 5.133695 +v 0.810446 6.026111 5.174828 +v 0.860927 5.995329 5.244224 +v 0.936242 6.026111 5.203091 +v 0.824894 6.674127 5.404601 +v 0.786790 6.663298 5.427156 +v 0.811584 6.652469 5.463843 +v 0.849688 6.663298 5.441288 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 0.772508 7.315738 5.637762 +v 1.497229 5.436160 4.161867 +v 1.357597 5.322253 4.134022 +v 1.425570 5.208346 4.259130 +v 1.565202 5.322253 4.286974 +v 1.125619 5.716535 4.666256 +v 1.020896 5.631104 4.645373 +v 1.071876 5.545674 4.739204 +v 1.176599 5.631104 4.760087 +v 0.765162 6.017244 5.155509 +v 0.691743 5.963954 5.146478 +v 0.722126 5.910665 5.213923 +v 0.795545 5.963954 5.222954 +v 0.444727 6.420751 5.592375 +v 0.409487 6.392430 5.586542 +v 0.414804 6.377044 5.629120 +v 0.450043 6.405365 5.634954 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v -0.061087 6.876646 5.615006 +v 1.954182 6.483880 4.707542 +v 2.021975 6.459475 4.763402 +v 2.072434 6.435069 4.691499 +v 2.004642 6.459475 4.635640 +v 2.261668 7.096606 4.665825 +v 2.295564 7.084403 4.693755 +v 2.320794 7.072200 4.657804 +v 2.286898 7.084403 4.629874 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 2.526950 7.726752 4.629835 +v 0.438267 6.429632 5.606050 +v 0.414175 6.398897 5.582536 +v 0.421264 6.368163 5.615446 +v 0.445356 6.398897 5.638959 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v -0.141888 6.605322 5.926658 +v 3.219571 6.469072 -0.078109 +v 3.230975 6.342716 0.052853 +v 3.270551 6.216360 -0.072506 +v 3.259147 6.342716 -0.203468 +v 3.733453 6.487620 -0.021628 +v 3.742956 6.382323 0.087507 +v 3.775936 6.277026 -0.016959 +v 3.766433 6.382323 -0.126094 +v 4.206037 6.624870 0.030313 +v 4.229965 6.545720 0.119416 +v 4.272674 6.466570 0.037637 +v 4.248746 6.545720 -0.051465 +v 4.662807 6.838914 0.080517 +v 4.686213 6.782190 0.147944 +v 4.723703 6.725467 0.087210 +v 4.700298 6.782190 0.019783 +v 5.117904 7.071841 0.130537 +v 5.134051 7.034326 0.175548 +v 5.159589 6.996810 0.135118 +v 5.143442 7.034326 0.090107 +v 5.574172 7.302090 0.180685 +v 5.583283 7.283955 0.203305 +v 5.597089 7.265820 0.183204 +v 5.587978 7.283955 0.160584 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 5.999984 7.585069 0.227486 +v 4.334825 5.948848 0.922732 +v 4.295790 5.890675 0.981075 +v 4.280187 5.832502 0.912634 +v 4.319222 5.890675 0.854290 +v 4.770383 5.684607 1.003235 +v 4.744359 5.645825 1.042130 +v 4.733958 5.607043 0.996502 +v 4.759982 5.645825 0.957607 +v 5.222106 5.469275 1.086725 +v 5.215028 5.448030 1.107269 +v 5.215760 5.426785 1.085552 +v 5.222838 5.448030 1.065007 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 5.722395 5.495978 1.179191 +v 4.622640 5.958681 1.889000 +v 4.609538 5.937193 1.906033 +v 4.622910 5.915705 1.889211 +v 4.636013 5.937193 1.872178 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 5.027837 5.941289 2.205871 +v 2.150409 7.991917 0.021371 +v 2.223603 7.920340 -0.007481 +v 2.146829 7.848762 -0.024673 +v 2.073635 7.920340 0.004179 +v 2.127791 8.141006 -0.269547 +v 2.190529 8.079654 -0.294277 +v 2.124723 8.018301 -0.309014 +v 2.061985 8.079654 -0.284284 +v 2.101800 8.171410 -0.603858 +v 2.154455 8.118974 -0.619669 +v 2.099989 8.066538 -0.627152 +v 2.047335 8.118974 -0.611341 +v 2.077694 8.263039 -0.913933 +v 2.119486 8.222279 -0.930848 +v 2.075581 8.181519 -0.941101 +v 2.033789 8.222279 -0.924186 +v 2.053450 8.357422 -1.225771 +v 2.084577 8.327933 -1.241244 +v 2.051432 8.298445 -1.251721 +v 2.020305 8.327933 -1.236247 +v 2.030896 8.506101 -1.515871 +v 2.051507 8.487343 -1.527988 +v 2.029271 8.468585 -1.536774 +v 2.008659 8.487343 -1.524657 +v 2.008281 8.658614 -1.806756 +v 2.018555 8.649472 -1.813217 +v 2.007406 8.640330 -1.818012 +v 1.997131 8.649472 -1.811551 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 1.986645 8.833367 -2.085047 +v 2.946494 8.420134 -0.331333 +v 2.954943 8.379452 -0.286974 +v 2.974000 8.338770 -0.327913 +v 2.965551 8.379452 -0.372272 +v 3.272807 8.462414 -0.290752 +v 3.279144 8.431903 -0.257482 +v 3.293437 8.401392 -0.288186 +v 3.287100 8.431903 -0.321455 +v 3.558159 8.606430 -0.255264 +v 3.567969 8.588993 -0.232389 +v 3.583083 8.571556 -0.252164 +v 3.573273 8.588993 -0.275038 +v 3.801141 8.820479 -0.225371 +v 3.806758 8.812475 -0.213741 +v 3.818040 8.807494 -0.222618 +v 3.812422 8.815498 -0.234248 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.925897 9.087750 -0.082086 +v 3.213307 8.972035 -0.277432 +v 3.202684 8.970988 -0.248978 +v 3.231150 8.969941 -0.238389 +v 3.241773 8.970988 -0.266843 +v 3.253091 9.289930 -0.190380 +v 3.247780 9.289407 -0.176154 +v 3.262013 9.288883 -0.170859 +v 3.267324 9.289407 -0.185086 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.235279 9.614585 -0.229355 +v 3.806164 8.824103 -0.222829 +v 3.813049 8.813987 -0.213822 +v 3.813017 8.803870 -0.225159 +v 3.806132 8.813987 -0.234167 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v 4.103378 8.924999 -0.323879 +v -0.238557 7.307096 0.603106 +v -0.416969 7.169384 0.637062 +v -0.286606 7.031672 0.763510 +v -0.108194 7.169384 0.729554 +v -0.384065 7.588102 1.088866 +v -0.532741 7.473342 1.117162 +v -0.424105 7.358582 1.222536 +v -0.275429 7.473342 1.194239 +v -0.529538 7.860610 1.574510 +v -0.649573 7.771229 1.600798 +v -0.563757 7.681849 1.688748 +v -0.443723 7.771229 1.662460 +v -0.666496 8.180132 2.031727 +v -0.757517 8.115544 2.054764 +v -0.694150 8.050957 2.124048 +v -0.603129 8.115544 2.101010 +v -0.802147 8.501809 2.484582 +v -0.864569 8.464027 2.505751 +v -0.824065 8.426246 2.557751 +v -0.761644 8.464027 2.536582 +v -0.905196 8.945080 2.828598 +v -0.937399 8.930491 2.842496 +v -0.918140 8.915903 2.871809 +v -0.885937 8.930491 2.857911 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.993329 9.435052 3.122818 +v -0.918464 8.386487 1.632757 +v -0.989647 8.350079 1.551550 +v -1.062236 8.313670 1.631503 +v -0.991052 8.350079 1.712709 +v -1.250655 8.864816 1.629860 +v -1.298110 8.840544 1.575723 +v -1.346503 8.816272 1.629025 +v -1.299047 8.840544 1.683162 +v -1.485691 9.386496 1.627811 +v -1.511321 9.379251 1.600726 +v -1.537420 9.372007 1.627360 +v -1.511790 9.379251 1.654446 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.609342 9.950221 1.626733 +v -1.024298 9.480569 1.892563 +v -1.059047 9.467821 1.884020 +v -1.063111 9.455073 1.919572 +v -1.028361 9.467821 1.928115 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v -1.269368 9.977707 2.063106 +v 1.859337 7.563104 1.402194 +v 1.913769 7.445670 1.523322 +v 1.946700 7.328237 1.394673 +v 1.892267 7.445670 1.273545 +v 2.255284 7.779741 1.368110 +v 2.301940 7.679084 1.471934 +v 2.330166 7.578427 1.361664 +v 2.283510 7.679084 1.257839 +v 2.716249 7.845561 1.328429 +v 2.747164 7.759115 1.415635 +v 2.762721 7.672670 1.324428 +v 2.731806 7.759115 1.237222 +v 3.128402 7.976531 1.292950 +v 3.171871 7.915480 1.361102 +v 3.203053 7.854429 1.286523 +v 3.159584 7.915480 1.218372 +v 3.456095 8.259929 1.264741 +v 3.502274 8.226090 1.314686 +v 3.539238 8.192252 1.257584 +v 3.493059 8.226090 1.207639 +v 3.697776 8.626657 1.243937 +v 3.734982 8.616221 1.276681 +v 3.766044 8.605786 1.238060 +v 3.728838 8.616221 1.205316 +v 3.736602 9.067736 1.240594 +v 3.755647 9.071175 1.256928 +v 3.771620 9.074614 1.237580 +v 3.752575 9.071175 1.221246 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 3.562689 9.484170 1.255565 +v 0.677967 7.871062 1.843559 +v 0.602643 7.803361 1.841461 +v 0.662207 7.735661 1.887616 +v 0.737530 7.803361 1.889714 +v 0.527193 7.965059 2.265038 +v 0.470701 7.914284 2.263465 +v 0.515373 7.863508 2.298081 +v 0.571866 7.914284 2.299654 +v 0.387451 8.130353 2.655679 +v 0.347439 8.099792 2.661199 +v 0.374871 8.069232 2.690845 +v 0.414883 8.099792 2.685325 +v 0.265468 8.395876 2.993443 +v 0.244225 8.389061 3.005428 +v 0.257791 8.374807 3.021370 +v 0.279034 8.381622 3.009385 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.462134 8.752385 3.187837 +v 0.253902 8.543679 1.568224 +v 0.227861 8.525394 1.528818 +v 0.192802 8.507110 1.560470 +v 0.218843 8.525394 1.599877 +v -0.004323 8.918598 1.535455 +v -0.017344 8.909456 1.515752 +v -0.034874 8.900314 1.531578 +v -0.021853 8.909456 1.551281 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v -0.237814 9.308322 1.505825 +v 0.264697 8.402979 3.006984 +v 0.259189 8.385342 2.989666 +v 0.258562 8.367704 3.007828 +v 0.264070 8.385342 3.025146 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v -0.182822 8.464095 3.068557 +v 2.864426 7.683589 1.463368 +v 2.810283 7.630359 1.466049 +v 2.861778 7.577128 1.449110 +v 2.915920 7.630359 1.446429 +v 2.921777 7.609552 1.772164 +v 2.876658 7.565194 1.774397 +v 2.919570 7.520835 1.760281 +v 2.964689 7.565194 1.758048 +v 2.979353 7.579463 2.082166 +v 2.944119 7.543648 2.088588 +v 2.979309 7.507834 2.081931 +v 3.014543 7.543648 2.075509 +v 3.036716 7.588958 2.391022 +v 3.011604 7.563054 2.402913 +v 3.039311 7.537149 2.404994 +v 3.064422 7.563054 2.393103 +v 3.088670 7.725881 2.670754 +v 3.072684 7.710330 2.682752 +v 3.091912 7.694778 2.688211 +v 3.107897 7.710330 2.676213 +v 3.139023 7.889030 2.941871 +v 3.131225 7.881968 2.948918 +v 3.141034 7.874906 2.952695 +v 3.148832 7.881968 2.945648 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 3.182565 8.104200 3.176312 +v 2.091865 7.391906 1.967708 +v 2.074286 7.365153 1.988159 +v 2.087965 7.338399 1.964918 +v 2.105544 7.365153 1.944467 +v 2.344481 7.301280 2.148437 +v 2.332762 7.283445 2.162071 +v 2.341881 7.265609 2.146577 +v 2.353601 7.283445 2.132943 +v 2.603046 7.317315 2.333421 +v 2.599017 7.308480 2.341548 +v 2.605408 7.299645 2.335112 +v 2.609437 7.308480 2.326984 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 2.858050 7.387529 2.515859 +v 1.484517 7.500579 2.102874 +v 1.477071 7.491725 2.108022 +v 1.485695 7.482872 2.105269 +v 1.493141 7.491725 2.100121 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v 1.625574 7.539714 2.389758 +v -0.536332 6.641325 -0.725530 +v -0.361305 6.464845 -0.820019 +v -0.557359 6.288365 -0.853563 +v -0.732386 6.464845 -0.759075 +v -0.619729 6.849983 -1.233323 +v -0.469706 6.698714 -1.314313 +v -0.637752 6.547446 -1.343065 +v -0.787775 6.698714 -1.262075 +v -0.706528 6.969654 -1.761830 +v -0.583157 6.847816 -1.839355 +v -0.724843 6.725977 -1.873349 +v -0.848214 6.847816 -1.795823 +v -0.780107 7.248173 -2.209843 +v -0.684272 7.161039 -2.289287 +v -0.800482 7.073905 -2.333906 +v -0.896318 7.161039 -2.254462 +v -0.852424 7.553954 -2.650172 +v -0.782478 7.499134 -2.721512 +v -0.871567 7.444314 -2.766734 +v -0.941513 7.499134 -2.695394 +v -0.903589 7.990397 -2.961710 +v -0.858291 7.965486 -3.017384 +v -0.919016 7.940575 -3.055645 +v -0.964314 7.965486 -2.999971 +v -0.941250 8.491078 -3.191021 +v -0.918797 8.481274 -3.220051 +v -0.949355 8.471469 -3.240375 +v -0.971808 8.481274 -3.211345 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -0.977179 9.002198 -3.409791 +v -1.556515 6.538976 -2.119774 +v -1.551018 6.431727 -2.227271 +v -1.543578 6.324479 -2.119890 +v -1.549075 6.431727 -2.012393 +v -2.085602 6.343698 -2.114989 +v -2.081479 6.263261 -2.195612 +v -2.075899 6.182825 -2.115077 +v -2.080022 6.263261 -2.034453 +v -2.615505 6.418998 -2.110197 +v -2.628341 6.366715 -2.163805 +v -2.640204 6.314433 -2.109973 +v -2.627369 6.366715 -2.056365 +v -3.154730 6.544433 -2.105561 +v -3.168355 6.520375 -2.131611 +v -3.172111 6.493604 -2.104923 +v -3.158486 6.517662 -2.078873 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -3.642843 6.716395 -1.902148 +v -2.208732 6.993960 -1.486175 +v -2.265796 6.957268 -1.520372 +v -2.281014 6.920577 -1.455610 +v -2.223949 6.957268 -1.421413 +v -2.624077 7.327752 -1.310540 +v -2.652609 7.309406 -1.327638 +v -2.660218 7.291060 -1.295257 +v -2.631686 7.309406 -1.278159 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -2.939116 7.763378 -1.177320 +v -3.163399 6.545879 -2.105281 +v -3.186952 6.519019 -2.118196 +v -3.163442 6.492158 -2.105203 +v -3.139890 6.519019 -2.092288 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -3.431953 6.519944 -1.617451 +v -0.276667 8.391029 -0.618431 +v -0.321209 8.352678 -0.758550 +v -0.457973 8.314327 -0.704578 +v -0.413430 8.352678 -0.564459 +v -0.504112 8.838584 -0.726501 +v -0.541231 8.806624 -0.843266 +v -0.655201 8.774665 -0.798289 +v -0.618082 8.806624 -0.681523 +v -0.631499 9.316195 -0.787027 +v -0.664111 9.301667 -0.881826 +v -0.758204 9.287139 -0.847230 +v -0.725592 9.301667 -0.752431 +v -0.718264 9.808708 -0.828253 +v -0.743695 9.806639 -0.899814 +v -0.815238 9.804569 -0.874329 +v -0.789806 9.806639 -0.802768 +v -0.697920 10.313466 -0.818586 +v -0.714801 10.316239 -0.866259 +v -0.762423 10.319013 -0.849235 +v -0.745541 10.316239 -0.801562 +v -0.679102 10.824779 -0.809645 +v -0.687554 10.825981 -0.833487 +v -0.711377 10.827184 -0.824981 +v -0.702925 10.825981 -0.801139 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -0.668154 11.336308 -0.804443 +v -1.129636 9.536407 -0.123929 +v -1.184198 9.512265 -0.170963 +v -1.224807 9.488124 -0.111464 +v -1.170245 9.512265 -0.064430 +v -1.479326 9.913040 -0.078130 +v -1.515701 9.896946 -0.109486 +v -1.542774 9.880852 -0.069820 +v -1.506399 9.896946 -0.038464 +v -1.600557 10.397405 -0.062253 +v -1.620620 10.396580 -0.077685 +v -1.636031 10.395755 -0.057607 +v -1.615969 10.396580 -0.042174 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.557074 10.904044 -0.067947 +v -1.339763 10.521996 -0.074502 +v -1.354045 10.517038 -0.094818 +v -1.373777 10.512080 -0.079737 +v -1.359494 10.517038 -0.059421 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v -1.496660 11.008261 -0.098652 +v 1.028403 8.520985 -0.392375 +v 1.003940 8.485620 -0.314869 +v 1.084676 8.450254 -0.305523 +v 1.109140 8.485620 -0.383029 +v 1.128492 8.761071 -0.237898 +v 1.107523 8.730759 -0.171464 +v 1.176726 8.700446 -0.163453 +v 1.197694 8.730759 -0.229887 +v 1.218838 8.998705 -0.098455 +v 1.204335 8.984408 -0.038508 +v 1.264975 8.970112 -0.027247 +v 1.279478 8.984408 -0.087194 +v 1.234830 9.286645 -0.073774 +v 1.224240 9.285719 -0.024253 +v 1.273765 9.284793 -0.013680 +v 1.284355 9.285719 -0.063202 +v 1.235822 9.589663 -0.072242 +v 1.227851 9.587805 -0.035147 +v 1.264964 9.585947 -0.027264 +v 1.272936 9.587805 -0.064359 +v 1.267198 9.885398 -0.023816 +v 1.261901 9.886009 0.000941 +v 1.286662 9.886621 0.006223 +v 1.291958 9.886009 -0.018534 +v 1.234563 10.179069 -0.074185 +v 1.231879 10.180190 -0.061862 +v 1.244223 10.181312 -0.059275 +v 1.246907 10.180190 -0.071599 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.235983 10.482296 -0.071993 +v 1.590415 9.015040 0.177823 +v 1.558559 8.981526 0.157151 +v 1.570403 8.948012 0.193233 +v 1.602259 8.981526 0.213905 +v 1.359983 9.099146 0.355255 +v 1.336091 9.074010 0.339750 +v 1.344974 9.048874 0.366812 +v 1.368866 9.074010 0.382316 +v 1.140382 9.209558 0.524346 +v 1.121945 9.194366 0.515942 +v 1.125358 9.179174 0.535914 +v 1.143795 9.194366 0.544319 +v 0.956050 9.396169 0.666041 +v 0.944586 9.391234 0.663908 +v 0.945364 9.384738 0.674749 +v 0.956829 9.389672 0.676882 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 0.885045 9.645629 0.818319 +v 1.718159 9.460472 0.509322 +v 1.721603 9.447294 0.530672 +v 1.740148 9.434116 0.519547 +v 1.736704 9.447294 0.498197 +v 1.942944 9.635054 0.613847 +v 1.944666 9.628465 0.624523 +v 1.953938 9.621876 0.618960 +v 1.952216 9.628465 0.608285 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 2.130365 9.854418 0.700999 +v 0.956250 9.397477 0.670053 +v 0.950155 9.390453 0.661458 +v 0.945165 9.383430 0.670737 +v 0.951259 9.390453 0.679331 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 0.714125 9.577865 0.685009 +v 1.613177 7.458849 -2.775551 +v 1.635639 7.372895 -2.692583 +v 1.612669 7.286941 -2.775412 +v 1.590206 7.372895 -2.858380 +v 2.148275 7.429885 -2.922183 +v 2.166993 7.358256 -2.853042 +v 2.147851 7.286628 -2.922066 +v 2.129132 7.358256 -2.991207 +v 2.678503 7.426578 -3.067481 +v 2.698423 7.369489 -3.013524 +v 2.688055 7.312400 -3.070098 +v 2.668135 7.369489 -3.124055 +v 3.199457 7.494817 -3.210237 +v 3.223725 7.453978 -3.172325 +v 3.225277 7.413138 -3.217312 +v 3.201009 7.453978 -3.255224 +v 3.671907 7.734602 -3.339701 +v 3.694605 7.710624 -3.316213 +v 3.702158 7.686646 -3.347991 +v 3.679461 7.710624 -3.371479 +v 4.095342 8.069823 -3.455735 +v 4.107818 8.058686 -3.444300 +v 4.112722 8.047549 -3.460497 +v 4.100246 8.058686 -3.471932 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 4.519386 8.408856 -3.571935 +v 0.137700 7.374602 -3.192664 +v 0.108756 7.334821 -3.228355 +v 0.106818 7.295040 -3.182444 +v 0.135763 7.334821 -3.146753 +v -0.353659 7.575346 -3.030046 +v -0.372955 7.548825 -3.053840 +v -0.374247 7.522304 -3.023233 +v -0.354951 7.548825 -2.999439 +v -0.845697 7.766853 -2.867203 +v -0.857733 7.754927 -2.878310 +v -0.860767 7.743001 -2.862216 +v -0.848731 7.754927 -2.851110 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -1.222645 8.150756 -2.742451 +v -0.582378 8.172772 -3.115818 +v -0.599550 8.164849 -3.123084 +v -0.603597 8.156926 -3.104883 +v -0.586425 8.164849 -3.097616 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v -0.865879 8.627284 -2.969716 +v 0.469981 8.664436 -2.085432 +v 0.519382 8.628643 -2.121576 +v 0.468525 8.592850 -2.155642 +v 0.419123 8.628643 -2.119497 +v 0.464938 8.918494 -2.328645 +v 0.507282 8.887815 -2.359625 +v 0.463690 8.857135 -2.388824 +v 0.421346 8.887815 -2.357843 +v 0.459454 9.141663 -2.593099 +v 0.494654 9.121043 -2.623118 +v 0.458240 9.100424 -2.651653 +v 0.423040 9.121043 -2.621634 +v 0.456717 9.454196 -2.725099 +v 0.484783 9.447922 -2.753643 +v 0.455558 9.441648 -2.780999 +v 0.427492 9.447922 -2.752455 +v 0.456137 9.799319 -2.753071 +v 0.477175 9.799304 -2.775000 +v 0.455246 9.799289 -2.796039 +v 0.434207 9.799304 -2.774109 +v 0.456420 10.152936 -2.739405 +v 0.470450 10.150717 -2.753852 +v 0.455833 10.148498 -2.767705 +v 0.441804 10.150717 -2.753258 +v 0.453626 10.480701 -2.874160 +v 0.460644 10.478839 -2.881223 +v 0.453339 10.476976 -2.887990 +v 0.446321 10.478839 -2.880926 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 0.452353 10.826634 -2.935567 +v 1.157924 9.370016 -2.364596 +v 1.179706 9.353208 -2.334850 +v 1.204275 9.336399 -2.362339 +v 1.182493 9.353208 -2.392085 +v 1.388200 9.636777 -2.353385 +v 1.404537 9.624170 -2.331076 +v 1.422964 9.611564 -2.351693 +v 1.406627 9.624170 -2.374002 +v 1.579643 9.927840 -2.344065 +v 1.592087 9.922172 -2.329116 +v 1.605925 9.916503 -2.342785 +v 1.593480 9.922172 -2.357734 +v 1.673528 10.264538 -2.339423 +v 1.680401 10.263749 -2.332023 +v 1.687541 10.261608 -2.338883 +v 1.680668 10.262397 -2.346283 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.737723 10.604068 -2.405368 +v 1.275365 10.046433 -2.288728 +v 1.292883 10.045140 -2.278633 +v 1.302907 10.043847 -2.296192 +v 1.285389 10.045140 -2.306288 +v 1.337908 10.393072 -2.305678 +v 1.346666 10.392426 -2.300631 +v 1.351678 10.391779 -2.309410 +v 1.342919 10.392426 -2.314457 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.350312 10.744419 -2.309040 +v 1.678013 10.266879 -2.333633 +v 1.687050 10.263073 -2.336177 +v 1.683056 10.259267 -2.344673 +v 1.674019 10.263073 -2.342129 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.758244 10.561313 -2.509291 +v 1.755687 8.579333 -1.104210 +v 1.873183 8.548559 -1.099288 +v 1.870047 8.517785 -1.216845 +v 1.752551 8.548559 -1.221767 +v 1.933835 8.986765 -1.279671 +v 2.031748 8.961120 -1.275569 +v 2.029135 8.935474 -1.373533 +v 1.931222 8.961120 -1.377635 +v 2.011819 9.423923 -1.356479 +v 2.092825 9.426148 -1.355833 +v 2.093410 9.428374 -1.436839 +v 2.012404 9.426148 -1.437485 +v 1.925505 9.877906 -1.271466 +v 1.986141 9.882025 -1.270866 +v 1.986462 9.886144 -1.331504 +v 1.925826 9.882025 -1.332105 +v 1.968462 10.355076 -1.313776 +v 2.008979 10.355404 -1.313467 +v 2.009286 10.355732 -1.353984 +v 1.968769 10.355404 -1.354293 +v 1.938100 10.828727 -1.283871 +v 1.958328 10.827603 -1.283686 +v 1.958450 10.826480 -1.303915 +v 1.938223 10.827603 -1.304100 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 2.040976 11.285085 -1.385196 +v 1.140953 9.611976 -1.839585 +v 1.186309 9.579112 -1.863185 +v 1.146078 9.546248 -1.894737 +v 1.100723 9.579112 -1.871137 +v 1.175986 9.900609 -2.216606 +v 1.206223 9.878699 -2.232339 +v 1.179403 9.856790 -2.253374 +v 1.149166 9.878699 -2.237641 +v 1.209866 10.202110 -2.581217 +v 1.225069 10.191995 -2.589992 +v 1.211743 10.181879 -2.601417 +v 1.196540 10.191995 -2.592642 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 1.239699 10.550719 -2.902284 +v 0.876808 10.473673 -1.841813 +v 0.876954 10.472403 -1.821594 +v 0.897173 10.471132 -1.821819 +v 0.897027 10.472403 -1.842039 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 0.917075 10.946156 -1.802280 +v 2.090300 8.740697 -0.115445 +v 2.071105 8.733698 -0.183347 +v 2.003395 8.726699 -0.163485 +v 2.022590 8.733698 -0.095583 +v 2.027442 9.064752 -0.150191 +v 2.010990 9.058752 -0.208393 +v 1.952953 9.052752 -0.191368 +v 1.969406 9.058752 -0.133167 +v 1.997164 9.385284 -0.166929 +v 1.983318 9.389032 -0.215505 +v 1.934819 9.392780 -0.201392 +v 1.948665 9.389032 -0.152816 +v 2.073888 9.698226 -0.124517 +v 2.063696 9.706322 -0.162889 +v 2.025781 9.714417 -0.151110 +v 2.035973 9.706322 -0.112738 +v 2.148447 10.021261 -0.083301 +v 2.140305 10.024879 -0.112356 +v 2.111371 10.028498 -0.103797 +v 2.119513 10.024879 -0.074742 +v 2.159279 10.358089 -0.077314 +v 2.153840 10.355746 -0.096689 +v 2.134541 10.353403 -0.090988 +v 2.139979 10.355746 -0.071613 +v 2.043264 10.665133 -0.141445 +v 2.040850 10.662648 -0.150964 +v 2.031505 10.660164 -0.147946 +v 2.033919 10.662648 -0.138427 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 1.945840 10.977146 -0.195300 +v 2.177366 9.653992 0.201983 +v 2.173865 9.639021 0.239473 +v 2.211436 9.624050 0.237002 +v 2.214937 9.639021 0.199513 +v 2.329728 9.904696 0.358586 +v 2.327103 9.893467 0.386703 +v 2.355281 9.882238 0.384850 +v 2.357907 9.893467 0.356733 +v 2.423821 10.202410 0.455297 +v 2.423105 10.198214 0.475105 +v 2.442924 10.194017 0.474932 +v 2.443640 10.198214 0.455125 +v 2.472154 10.524634 0.505026 +v 2.472070 10.524086 0.515141 +v 2.482101 10.522679 0.515149 +v 2.482186 10.523228 0.505034 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.524934 10.851511 0.501335 +v 2.182521 10.296464 0.271694 +v 2.171844 10.293127 0.288586 +v 2.189026 10.289790 0.298788 +v 2.199703 10.293127 0.281897 +v 2.207651 10.610572 0.376359 +v 2.202312 10.608904 0.384805 +v 2.210903 10.607236 0.389906 +v 2.216242 10.608904 0.381460 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.221721 10.936026 0.434964 +v 2.479354 10.526678 0.503987 +v 2.470399 10.523657 0.507632 +v 2.474901 10.520636 0.516189 +v 2.483857 10.523657 0.512543 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 2.429203 10.824163 0.641425 +v 0.737849 9.372725 -0.500004 +v 0.765584 9.361624 -0.534434 +v 0.729473 9.350523 -0.559943 +v 0.701738 9.361624 -0.525513 +v 0.710483 9.673780 -0.695844 +v 0.733595 9.664530 -0.724537 +v 0.703503 9.655279 -0.745794 +v 0.680390 9.664530 -0.717102 +v 0.703194 10.018810 -0.748005 +v 0.721508 10.020190 -0.772217 +v 0.697259 10.021570 -0.790481 +v 0.678944 10.020190 -0.766269 +v 0.715414 10.362825 -0.660557 +v 0.729208 10.366649 -0.678294 +v 0.711080 10.370472 -0.691569 +v 0.697286 10.366649 -0.673833 +v 0.725262 10.715909 -0.590081 +v 0.734432 10.717477 -0.602095 +v 0.722320 10.719045 -0.611135 +v 0.713150 10.717477 -0.599121 +v 0.728458 11.074984 -0.567209 +v 0.733037 11.075360 -0.573260 +v 0.726975 11.075737 -0.577824 +v 0.722396 11.075360 -0.571773 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v 0.730765 11.433690 -0.550699 +v -0.030898 10.039152 -0.800005 +v -0.046301 10.029504 -0.813757 +v -0.056359 10.019855 -0.795723 +v -0.040956 10.029504 -0.781971 +v -0.271077 10.303603 -0.759616 +v -0.281346 10.297171 -0.768785 +v -0.288052 10.290738 -0.756762 +v -0.277783 10.297171 -0.747594 +v -0.461234 10.604988 -0.727640 +v -0.466785 10.602432 -0.732154 +v -0.470554 10.599876 -0.726072 +v -0.465004 10.602432 -0.721558 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.615828 10.927654 -0.701643 +v -0.274640 10.694409 -0.771196 +v -0.281828 10.693636 -0.768859 +v -0.279415 10.692863 -0.761696 +v -0.272228 10.693636 -0.764033 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v -0.300229 11.048905 -0.720289 +v 3.219303 8.207003 0.522815 +v 3.254799 8.173357 0.501926 +v 3.215554 8.139711 0.489430 +v 3.180058 8.173357 0.510319 +v 3.186977 8.370264 0.234963 +v 3.217402 8.341425 0.217058 +v 3.183764 8.312586 0.206347 +v 3.153339 8.341425 0.224252 +v 3.152473 8.493961 -0.072288 +v 3.177806 8.470022 -0.087392 +v 3.149754 8.446083 -0.096501 +v 3.124420 8.470022 -0.081397 +v 3.120945 8.658522 -0.353035 +v 3.140702 8.642492 -0.369655 +v 3.117751 8.626463 -0.381480 +v 3.097993 8.642492 -0.364859 +v 3.098258 8.912888 -0.555061 +v 3.112655 8.905855 -0.571270 +v 3.095021 8.898823 -0.583883 +v 3.080623 8.905855 -0.567673 +v 3.088814 9.229940 -0.639147 +v 3.098301 9.228717 -0.650954 +v 3.086432 9.227493 -0.660363 +v 3.076946 9.228717 -0.648556 +v 3.088849 9.561880 -0.638838 +v 3.093590 9.561485 -0.644762 +v 3.087653 9.561090 -0.649487 +v 3.082913 9.561485 -0.643563 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.082192 9.889842 -0.698120 +v 3.890648 8.439417 1.180344 +v 3.866032 8.421691 1.182180 +v 3.880298 8.403965 1.202325 +v 3.904914 8.421691 1.200488 +v 3.758495 8.563079 1.461001 +v 3.740032 8.549785 1.462378 +v 3.750732 8.536490 1.477487 +v 3.769194 8.549785 1.476110 +v 3.659902 8.797234 1.670385 +v 3.646780 8.790044 1.673031 +v 3.653100 8.782854 1.684831 +v 3.666221 8.790044 1.682185 +v 3.566753 9.047389 1.868145 +v 3.559954 9.044630 1.870115 +v 3.563139 9.040944 1.875945 +v 3.569938 9.043703 1.873975 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.555562 9.315310 2.064813 +v 3.983678 8.978368 1.540486 +v 3.971164 8.972855 1.547112 +v 3.979610 8.967341 1.558477 +v 3.992124 8.972855 1.551851 +v 3.945160 9.261699 1.710855 +v 3.938903 9.258943 1.714168 +v 3.943126 9.256186 1.719851 +v 3.949383 9.258943 1.716538 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.906332 9.544190 1.882596 +v 3.568958 9.047722 1.872397 +v 3.565416 9.044167 1.866693 +v 3.560935 9.040611 1.871693 +v 3.564477 9.044167 1.877396 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 3.345511 9.293653 1.852792 +v 0.293090 9.412202 0.200420 +v 0.254312 9.398012 0.181111 +v 0.239275 9.383822 0.221736 +v 0.278053 9.398012 0.241046 +v 0.120206 9.707664 0.268901 +v 0.087891 9.695839 0.252810 +v 0.075360 9.684013 0.286665 +v 0.107675 9.695839 0.302756 +v 0.001538 10.025928 0.315906 +v -0.025909 10.021418 0.303665 +v -0.037529 10.016908 0.331381 +v -0.010081 10.021418 0.343622 +v -0.021702 10.368191 0.325112 +v -0.042577 10.369421 0.316046 +v -0.051582 10.370651 0.336947 +v -0.030707 10.369421 0.346013 +v 0.041007 10.709604 0.300272 +v 0.027083 10.710316 0.294231 +v 0.021072 10.711027 0.308168 +v 0.034996 10.710316 0.314209 +v 0.010837 11.057919 0.312223 +v 0.003865 11.057842 0.309206 +v 0.000849 11.057766 0.316179 +v 0.007821 11.057842 0.319195 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v 0.021892 11.405996 0.307844 +v -0.379023 10.068360 0.678163 +v -0.386026 10.055011 0.661068 +v -0.396949 10.041661 0.675968 +v -0.389945 10.055011 0.693062 +v -0.694990 10.212516 0.639462 +v -0.699659 10.203616 0.628065 +v -0.706940 10.194716 0.637998 +v -0.702271 10.203616 0.649395 +v -0.949863 10.443878 0.608243 +v -0.953699 10.440978 0.602361 +v -0.958840 10.438078 0.607144 +v -0.955005 10.440978 0.613026 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -1.062781 10.772000 0.594413 +v -0.465646 10.711315 0.865679 +v -0.473112 10.710425 0.864586 +v -0.474100 10.709536 0.872066 +v -0.466635 10.710425 0.873159 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v -0.515959 11.054188 0.903694 +v 0.082164 9.300700 0.179967 +v 0.098368 9.284989 0.152624 +v 0.067895 9.269279 0.143592 +v 0.051691 9.284989 0.170935 +v 0.000092 9.553864 -0.029254 +v 0.013981 9.540398 -0.052691 +v -0.012139 9.526932 -0.060433 +v -0.026028 9.540398 -0.036996 +v -0.074059 9.820910 -0.218280 +v -0.063058 9.811987 -0.239273 +v -0.085398 9.803064 -0.247188 +v -0.096399 9.811987 -0.226194 +v -0.123184 10.125957 -0.343513 +v -0.114975 10.123110 -0.361815 +v -0.133439 10.120262 -0.369653 +v -0.141648 10.123110 -0.351351 +v -0.123997 10.463672 -0.345585 +v -0.117836 10.461480 -0.359301 +v -0.131680 10.459289 -0.365169 +v -0.137841 10.461480 -0.351454 +v -0.175156 10.773583 -0.475991 +v -0.170952 10.771182 -0.484889 +v -0.180084 10.768781 -0.488556 +v -0.184288 10.771182 -0.479658 +v -0.209210 11.098294 -0.562797 +v -0.207140 11.097377 -0.567328 +v -0.211738 11.096459 -0.569243 +v -0.213808 11.097377 -0.564712 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v -0.240960 11.425291 -0.643731 +v 0.469610 9.873804 -0.551696 +v 0.484222 9.862062 -0.544010 +v 0.483460 9.850319 -0.560503 +v 0.468848 9.862062 -0.568188 +v 0.737637 9.992987 -0.722120 +v 0.748595 9.984179 -0.716355 +v 0.748024 9.975372 -0.728724 +v 0.737065 9.984179 -0.734489 +v 0.926130 10.242570 -0.841972 +v 0.934975 10.238548 -0.839108 +v 0.936134 10.234527 -0.848333 +v 0.927289 10.238548 -0.851197 +v 1.058098 10.540694 -0.925881 +v 1.062963 10.539882 -0.924733 +v 1.063980 10.539054 -0.929625 +v 1.059115 10.539866 -0.930774 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 1.057361 10.878226 -0.927126 +v 0.475785 10.516756 -0.705112 +v 0.485863 10.515800 -0.704749 +v 0.486135 10.514843 -0.714830 +v 0.476057 10.515800 -0.715193 +v 0.530722 10.846943 -0.756691 +v 0.535761 10.846465 -0.756510 +v 0.535898 10.845987 -0.761550 +v 0.530859 10.846465 -0.761732 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 0.546614 11.184345 -0.771611 +v 1.060134 10.542244 -0.925225 +v 1.064411 10.539874 -0.926546 +v 1.061944 10.537504 -0.930281 +v 1.057667 10.539874 -0.928960 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v 1.136512 10.793577 -1.138549 +v -1.060618 9.349521 0.839770 +v -1.086349 9.334128 0.834819 +v -1.082117 9.318736 0.860678 +v -1.056386 9.334128 0.865629 +v -1.225165 9.540940 0.999788 +v -1.246608 9.528113 0.995662 +v -1.243081 9.515286 1.017211 +v -1.221639 9.528113 1.021338 +v -1.369816 9.759637 1.140458 +v -1.387392 9.749984 1.137567 +v -1.384993 9.740331 1.155217 +v -1.367417 9.749984 1.158108 +v -1.516620 9.976130 1.283221 +v -1.530111 9.969394 1.281353 +v -1.528621 9.962657 1.294891 +v -1.515130 9.969394 1.296759 +v -1.640628 10.217302 1.403816 +v -1.650239 10.214167 1.403170 +v -1.649862 10.211031 1.412795 +v -1.640252 10.214167 1.413440 +v -1.705305 10.500752 1.466712 +v -1.710269 10.499761 1.466543 +v -1.710239 10.498769 1.471510 +v -1.705275 10.499761 1.471678 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.763811 10.787963 1.523607 +v -1.535122 9.691476 0.183936 +v -1.523843 9.681565 0.186273 +v -1.530622 9.671655 0.176960 +v -1.541901 9.681565 0.174623 +v -1.374451 9.734500 -0.065118 +v -1.366932 9.727893 -0.063560 +v -1.371451 9.721286 -0.069768 +v -1.378970 9.727893 -0.071326 +v -1.244273 9.908098 -0.266905 +v -1.239858 9.905628 -0.267142 +v -1.241461 9.903158 -0.271263 +v -1.245877 9.905628 -0.271025 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.152973 10.153969 -0.408428 +v -1.895065 10.116889 0.332035 +v -1.899369 10.114243 0.332393 +v -1.897421 10.111596 0.336247 +v -1.893117 10.114243 0.335889 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v -2.003948 10.315444 0.526725 +v 1.330240 9.169027 -0.967000 +v 1.359177 9.149070 -0.962375 +v 1.349854 9.129112 -0.990156 +v 1.320917 9.149070 -0.994782 +v 1.479111 9.375711 -1.142759 +v 1.503914 9.358605 -1.138794 +v 1.495923 9.341499 -1.162606 +v 1.471120 9.358605 -1.166571 +v 1.649871 9.535957 -1.344359 +v 1.671115 9.522425 -1.341734 +v 1.665030 9.508892 -1.362257 +v 1.643786 9.522425 -1.364882 +v 1.778362 9.766452 -1.496058 +v 1.797347 9.759385 -1.496307 +v 1.794470 9.752318 -1.515075 +v 1.775484 9.759385 -1.514825 +v 1.844759 10.053540 -1.574447 +v 1.859853 10.052261 -1.575643 +v 1.858549 10.050982 -1.590728 +v 1.843456 10.052261 -1.589532 +v 1.828390 10.360598 -1.555121 +v 1.838485 10.360699 -1.555957 +v 1.837648 10.360800 -1.566052 +v 1.827553 10.360699 -1.565216 +v 1.843722 10.669982 -1.573222 +v 1.848767 10.669826 -1.573638 +v 1.848347 10.669669 -1.578683 +v 1.843302 10.669826 -1.578267 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 1.850514 10.979530 -1.581241 +v 2.159394 9.398507 -0.636294 +v 2.147189 9.384189 -0.628779 +v 2.158903 9.369870 -0.637038 +v 2.171107 9.384189 -0.644554 +v 2.328664 9.357823 -0.379648 +v 2.319511 9.347084 -0.374012 +v 2.328296 9.336345 -0.380206 +v 2.337449 9.347084 -0.385843 +v 2.498522 9.372134 -0.122111 +v 2.492775 9.364984 -0.117815 +v 2.498987 9.357833 -0.121406 +v 2.504734 9.364984 -0.125702 +v 2.668625 9.387053 0.135442 +v 2.665456 9.383324 0.136745 +v 2.669386 9.380179 0.137306 +v 2.672556 9.383909 0.136003 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.540383 9.508130 0.389193 +v 2.072506 9.625596 -0.092564 +v 2.067879 9.620390 -0.085209 +v 2.076406 9.615184 -0.083530 +v 2.081033 9.620390 -0.090885 +v 2.171505 9.809452 0.136827 +v 2.169191 9.806849 0.140505 +v 2.173454 9.804247 0.141344 +v 2.175768 9.806849 0.137667 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.251782 10.043303 0.322841 +v 2.670309 9.386873 0.137098 +v 2.667266 9.383616 0.139504 +v 2.667703 9.380360 0.135650 +v 2.670745 9.383616 0.133243 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 2.915206 9.254670 0.273207 +v 3.572619 8.744750 -0.181974 +v 3.569911 8.726005 -0.158208 +v 3.590329 8.707259 -0.170667 +v 3.593037 8.726005 -0.194433 +v 3.843965 8.849008 -0.008740 +v 3.841708 8.833386 0.011065 +v 3.858723 8.817765 0.000682 +v 3.860980 8.833386 -0.019122 +v 4.059721 9.058984 0.129004 +v 4.061701 9.050436 0.147265 +v 4.079100 9.041888 0.141376 +v 4.077119 9.050436 0.123115 +v 4.173482 9.364929 0.201632 +v 4.176025 9.360699 0.216003 +v 4.190131 9.356468 0.212261 +v 4.187588 9.360699 0.197890 +v 4.287796 9.673479 0.274613 +v 4.289691 9.671296 0.284321 +v 4.299296 9.669113 0.281955 +v 4.297400 9.671296 0.272246 +v 4.351613 10.001936 0.315355 +v 4.352631 10.001153 0.320254 +v 4.357503 10.000370 0.319116 +v 4.356485 10.001153 0.314217 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 4.418037 10.330354 0.357762 +v 3.511603 9.058545 -1.100678 +v 3.522406 9.048116 -1.098352 +v 3.513839 9.037686 -1.105332 +v 3.503036 9.048116 -1.107658 +v 3.655736 9.117075 -1.400675 +v 3.662938 9.110122 -1.399124 +v 3.657227 9.103168 -1.403777 +v 3.650025 9.110122 -1.405328 +v 3.795455 9.213279 -1.691481 +v 3.799401 9.210104 -1.691424 +v 3.796890 9.206929 -1.694470 +v 3.792944 9.210104 -1.694527 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.911547 9.417629 -1.933115 +v 3.781848 9.595761 -1.376323 +v 3.783757 9.594165 -1.380735 +v 3.779162 9.592568 -1.382146 +v 3.777253 9.594165 -1.377735 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 3.717467 9.896475 -1.515909 +v 0.171890 9.272048 -0.052008 +v 0.139521 9.259621 -0.044606 +v 0.151384 9.247193 -0.013592 +v 0.183754 9.259621 -0.020994 +v 0.085876 9.578842 0.109129 +v 0.058131 9.568191 0.115474 +v 0.068299 9.557539 0.142057 +v 0.096045 9.568191 0.135712 +v 0.002444 9.888045 0.265429 +v -0.020819 9.879718 0.270982 +v -0.012487 9.871390 0.293400 +v 0.010776 9.879718 0.287847 +v -0.072920 10.205236 0.406615 +v -0.091852 10.200076 0.411659 +v -0.085507 10.194916 0.430194 +v -0.066576 10.200076 0.425151 +v -0.120626 10.544279 0.495985 +v -0.135137 10.543186 0.500355 +v -0.130692 10.542093 0.514844 +v -0.116180 10.543186 0.510474 +v -0.109526 10.899957 0.475191 +v -0.119197 10.899158 0.478097 +v -0.116230 10.898358 0.487750 +v -0.106559 10.899158 0.484843 +v -0.160846 11.240652 0.571333 +v -0.165681 11.240242 0.572786 +v -0.164197 11.239832 0.577611 +v -0.159362 11.240242 0.576159 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.150684 11.596360 0.552297 +v -0.506285 10.046764 0.217396 +v -0.519225 10.040720 0.203027 +v -0.532261 10.034676 0.217308 +v -0.519321 10.040720 0.231678 +v -0.734744 10.322257 0.216624 +v -0.744449 10.317724 0.205847 +v -0.754226 10.313191 0.216558 +v -0.744521 10.317724 0.227335 +v -0.804315 10.669603 0.216389 +v -0.811353 10.668406 0.209202 +v -0.818439 10.667208 0.216341 +v -0.811401 10.668406 0.223528 +v -0.860264 11.021862 0.216196 +v -0.863831 11.021633 0.212607 +v -0.867397 11.021210 0.216179 +v -0.863830 11.021439 0.219768 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.876373 11.377794 0.235558 +v -0.886387 10.652804 0.185212 +v -0.893323 10.647317 0.180272 +v -0.894935 10.641829 0.188633 +v -0.888000 10.647317 0.193572 +v -1.156268 10.860498 0.293219 +v -1.159735 10.857755 0.290749 +v -1.160542 10.855011 0.294929 +v -1.157074 10.857755 0.297399 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -1.397348 11.105169 0.389700 +v -0.860960 11.023273 0.217439 +v -0.862399 11.021536 0.212905 +v -0.866701 11.019798 0.214936 +v -0.865262 11.021536 0.219470 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +v -1.022594 11.333711 0.146952 +vn -0.715323 0.144322 -0.683706 +vn -0.747398 0.209876 -0.630299 +vn 0.696432 0.145238 -0.702719 +vn -0.641804 0.006592 0.766808 +vn -0.680715 0.077944 0.728355 +vn 0.763054 0.017151 0.646077 +vn 0.721091 -0.054994 0.690603 +vn 0.647603 0.086001 -0.757073 +vn -0.708365 0.288339 -0.644246 +vn 0.668355 0.005982 -0.743797 +vn -0.640828 0.148106 0.753227 +vn 0.739341 -0.135105 0.659597 +vn -0.711783 0.224311 -0.665578 +vn 0.695791 0.036348 -0.717277 +vn -0.621815 0.110111 0.775353 +vn 0.756157 -0.068087 0.650807 +vn -0.744316 0.089022 -0.661824 +vn -0.643727 0.078951 0.761132 +vn 0.745262 0.067629 0.663320 +vn 0.681600 0.077364 -0.727592 +vn -0.749168 0.047731 -0.660604 +vn -0.669362 0.091494 0.737236 +vn 0.739769 0.110324 0.663717 +vn 0.656087 0.066286 -0.751732 +vn -0.775170 0.061434 -0.628742 +vn -0.648091 0.226386 0.727103 +vn 0.711966 0.112552 0.693106 +vn 0.669881 -0.069338 -0.739189 +vn -0.710379 0.041536 -0.702567 +vn 0.658467 -0.121036 -0.742790 +vn -0.649190 0.274636 0.709281 +vn 0.778069 0.097598 0.620502 +vn -0.991424 0.122562 0.044984 +vn -0.050050 -0.034455 -0.998138 +vn 0.062777 0.144810 0.987457 +vn 0.997925 -0.012391 -0.063082 +vn -0.094668 0.233436 0.967742 +vn -0.043580 0.265297 0.963164 +vn -0.985046 0.131474 -0.111148 +vn 0.998505 0.018097 0.051241 +vn 0.994385 0.077090 0.072329 +vn 0.047121 -0.074648 -0.996094 +vn 0.097018 -0.110752 -0.989074 +vn -0.994049 0.083407 -0.069918 +vn -0.069399 0.355174 0.932188 +vn -0.998596 0.014618 -0.050386 +vn 0.986633 0.152287 0.057466 +vn 0.073794 -0.202338 -0.976501 +vn -0.058687 0.388592 0.919523 +vn -0.995392 -0.063875 -0.071261 +vn 0.978912 0.204230 -0.003296 +vn 0.088809 -0.233955 -0.968169 +vn -0.079379 0.406140 0.910337 +vn 0.955077 0.296243 -0.002106 +vn 0.077212 -0.255287 -0.963775 +vn -0.990539 -0.136876 -0.008667 +vn -0.107364 0.455184 0.883877 +vn -0.983062 -0.182440 -0.016968 +vn 0.944762 0.325297 -0.039277 +vn 0.074160 -0.313913 -0.946532 +vn -0.163884 0.511307 0.843593 +vn -0.996124 -0.074099 -0.047304 +vn 0.970031 0.241035 0.029939 +vn 0.039125 -0.388958 -0.920408 +vn 0.621418 0.447798 0.642842 +vn -0.780847 0.373943 0.500412 +vn 0.779260 -0.280740 -0.560259 +vn -0.632221 -0.347301 -0.692557 +vn 0.172826 0.190680 -0.966308 +vn 0.173833 0.158238 -0.971954 +vn 0.982604 0.080294 0.167272 +vn -0.979675 0.080294 -0.183691 +vn -0.984985 0.077364 -0.154210 +vn -0.175939 -0.034059 0.983795 +vn -0.176061 -0.001038 0.984375 +vn 0.977355 0.077395 0.196783 +vn 0.173772 0.156590 -0.972228 +vn 0.982879 0.079653 0.166082 +vn -0.979492 0.080020 -0.184881 +vn -0.176122 0.000519 0.984344 +vn 0.172521 0.196631 -0.965148 +vn -0.982635 0.078127 -0.168279 +vn -0.175817 -0.039796 0.983612 +vn 0.979888 0.079073 0.183020 +vn 0.169836 0.268563 -0.948149 +vn 0.983734 0.083285 0.159093 +vn -0.977874 0.084048 -0.191473 +vn -0.174749 -0.113559 0.978027 +vn 0.189703 0.378002 -0.906125 +vn -0.981780 -0.000610 -0.189856 +vn -0.133580 -0.221229 0.966002 +vn 0.965941 0.161260 0.202307 +vn 0.137516 0.391003 -0.910031 +vn 0.940825 0.229408 0.249306 +vn -0.978271 -0.088137 -0.187536 +vn -0.181005 -0.245216 0.952391 +vn -0.577532 0.157964 -0.800928 +vn 0.785974 0.369030 -0.495987 +vn -0.808405 -0.263833 0.526139 +vn 0.552660 -0.053468 0.831660 +vn -0.917234 0.334391 -0.216468 +vn -0.848109 0.386273 -0.362560 +vn 0.306040 0.074587 -0.949065 +vn -0.199469 0.238197 0.950499 +vn -0.322153 0.092776 0.942106 +vn 0.912839 -0.151982 0.378948 +vn 0.944945 -0.240211 0.222083 +vn 0.314371 -0.109195 -0.942991 +vn -0.836299 0.483779 -0.257942 +vn -0.361675 -0.106693 0.926145 +vn 0.892148 -0.341990 0.295083 +vn 0.387005 0.256813 -0.885556 +vn -0.857418 0.474960 -0.197943 +vn -0.289621 -0.006653 0.957091 +vn 0.873287 -0.339335 0.349559 +vn 0.381359 0.135563 -0.914396 +vn -0.865963 0.411115 -0.284646 +vn 0.322123 0.009156 -0.946623 +vn -0.244026 0.127689 0.961303 +vn 0.920499 -0.264718 0.287301 +vn -0.876797 0.388409 -0.283425 +vn -0.262001 0.131626 0.956023 +vn 0.926511 -0.238899 0.290628 +vn 0.306375 0.019776 -0.951689 +vn -0.819910 0.320231 0.474502 +vn -0.418104 0.239357 -0.876278 +vn 0.453780 -0.133610 0.881008 +vn 0.855922 -0.214576 -0.470443 +vn -0.910123 0.411664 -0.046266 +vn -0.914823 0.389813 -0.105289 +vn 0.114170 0.069124 -0.991028 +vn -0.043733 0.140538 0.989105 +vn -0.045412 0.073733 0.996216 +vn 0.959777 -0.259346 0.107364 +vn 0.969390 -0.240425 0.049562 +vn 0.075503 0.015107 -0.997009 +vn -0.930784 0.358501 -0.071291 +vn -0.073946 0.013153 0.997162 +vn 0.974425 -0.207404 0.086428 +vn 0.126072 0.135289 -0.982727 +vn -0.899197 0.431837 -0.070376 +vn -0.116550 0.011200 0.993103 +vn 0.956389 -0.283517 0.070132 +vn 0.095462 0.165441 -0.981567 +vn -0.873287 0.479659 -0.085269 +vn 0.192999 0.237068 -0.952116 +vn -0.093631 -0.113285 0.989135 +vn 0.944853 -0.324625 0.042848 +vn -0.764000 0.121647 0.633595 +vn -0.508530 0.484634 -0.711661 +vn 0.552873 -0.385235 0.738853 +vn 0.798059 -0.020508 -0.602191 +vn -0.696951 0.346385 0.627888 +vn -0.712058 0.285745 0.641285 +vn -0.633198 0.070925 -0.770714 +vn 0.658437 0.085086 0.747795 +vn 0.700888 0.070650 0.709738 +vn 0.728690 -0.194891 -0.656484 +vn 0.736534 -0.131993 -0.663381 +vn -0.675253 0.085086 -0.732627 +vn -0.710166 0.197058 0.675832 +vn 0.684622 0.136326 0.715995 +vn 0.756005 -0.036866 -0.653493 +vn -0.661458 0.018220 -0.749718 +vn -0.745689 0.242470 0.620594 +vn -0.688833 0.035920 -0.724021 +vn 0.652242 0.131413 0.746483 +vn 0.710807 -0.090060 -0.697562 +vn -0.716514 0.233467 0.657308 +vn -0.622211 0.094272 -0.777123 +vn 0.705039 0.048494 0.707480 +vn 0.745659 -0.078036 -0.661733 +vn -0.047792 0.091098 0.994690 +vn -0.992981 0.103427 -0.057161 +vn 0.998840 0.007477 0.047182 +vn 0.061892 0.019776 -0.997864 +vn -0.157384 0.417341 0.894986 +vn -0.160741 0.368572 0.915586 +vn -0.973388 0.067812 -0.218787 +vn 0.981506 0.083743 0.172002 +vn 0.989593 0.068606 0.126286 +vn 0.166784 -0.269478 -0.948424 +vn 0.169164 -0.217566 -0.961241 +vn -0.981292 0.083743 -0.173162 +vn -0.168371 0.221992 0.960387 +vn -0.971129 0.072207 -0.227302 +vn 0.990417 0.071169 0.118076 +vn 0.173040 -0.065889 -0.982696 +vn -0.196600 0.169836 0.965636 +vn 0.980224 0.014771 0.197272 +vn 0.148350 -0.008667 -0.988891 +vn -0.975372 0.146397 -0.164830 +vn 0.573687 0.058504 0.816950 +vn -0.797082 0.251228 0.549089 +vn 0.814112 -0.142094 -0.563005 +vn -0.563402 0.052828 -0.824458 +vn -0.737480 0.401532 0.543016 +vn -0.722312 0.441389 0.532365 +vn -0.552660 0.066958 -0.830683 +vn 0.629170 0.066958 0.774346 +vn 0.599353 0.081851 0.796258 +vn 0.779107 -0.252663 -0.573687 +vn 0.769677 -0.294137 -0.566576 +vn -0.582659 0.080538 -0.808679 +vn -0.741447 0.451491 0.496323 +vn -0.516190 0.160588 -0.841273 +vn 0.600604 -0.029267 0.798975 +vn 0.745628 -0.297189 -0.596362 +vn -0.734581 0.389935 0.555223 +vn 0.556749 -0.115604 0.822565 +vn 0.797510 -0.245705 -0.550981 +vn -0.485946 0.256142 -0.835597 +vn -0.154973 0.139775 0.977966 +vn -0.900052 0.388958 -0.196448 +vn 0.938994 -0.284341 0.193396 +vn 0.195990 -0.035859 -0.979919 +vn -0.896298 0.217322 -0.386517 +vn -0.912442 0.112125 -0.393475 +vn 0.442274 0.077029 -0.893551 +vn -0.435255 0.085910 0.896176 +vn -0.346263 0.077029 0.934965 +vn 0.916471 -0.062075 0.395215 +vn 0.917325 0.044740 0.395581 +vn 0.352977 0.085879 -0.931669 +vn -0.917722 0.033601 -0.395764 +vn -0.413526 0.078005 0.907102 +vn 0.911161 0.123783 0.392926 +vn 0.375835 0.078005 -0.923368 +vn -0.928831 0.051515 0.366832 +vn -0.370708 0.051515 -0.927305 +vn 0.367321 0.060121 0.928129 +vn 0.927091 0.060121 -0.369884 +vn -0.791131 0.597888 -0.128727 +vn -0.836238 0.531144 -0.136143 +vn 0.228919 0.052431 -0.972015 +vn -0.154241 0.089480 0.983947 +vn -0.090976 0.052370 0.994446 +vn 0.873836 -0.464919 0.142186 +vn 0.908109 -0.391705 0.147801 +vn 0.165685 0.089480 -0.982086 +vn -0.893399 0.433271 -0.118748 +vn -0.097079 0.122196 0.987732 +vn 0.943358 -0.283242 0.172613 +vn 0.176214 0.016449 -0.984191 +vn -0.716514 0.366192 0.593677 +vn -0.557848 0.209235 -0.803095 +vn 0.594440 -0.104038 0.797357 +vn 0.759087 -0.262764 -0.595538 +vn 0.717551 0.120640 -0.685934 +vn 0.727287 0.107456 -0.677847 +vn 0.688070 0.064760 0.722709 +vn -0.681265 0.093356 -0.726035 +vn -0.690542 0.079348 -0.718894 +vn -0.730796 0.037080 0.681539 +vn -0.721763 0.050233 0.690268 +vn 0.678396 0.078005 0.730522 +vn 0.729545 0.135289 -0.670400 +vn 0.688894 0.135289 0.712088 +vn -0.673299 0.024201 -0.738945 +vn -0.715720 0.024171 0.697928 +vn 0.024842 0.055971 -0.998108 +vn 0.980071 0.196417 0.028871 +vn -0.995849 -0.086032 -0.029328 +vn -0.033906 0.055574 0.997864 +vn -0.319102 0.303842 -0.897671 +vn -0.344371 0.203711 -0.916440 +vn 0.922422 0.108524 -0.370556 +vn -0.949614 0.069735 0.305490 +vn -0.915983 0.071596 0.394757 +vn 0.347240 -0.150761 0.925565 +vn 0.334361 -0.047609 0.941221 +vn 0.955382 0.072848 -0.286142 +vn -0.904996 0.080142 -0.417798 +vn 0.422163 0.052126 -0.904996 +vn -0.413251 0.058901 0.908689 +vn 0.903348 0.031343 0.427717 +vn 0.492050 0.284707 -0.822687 +vn 0.489914 0.298196 -0.819147 +vn 0.849818 0.078341 0.521195 +vn -0.867641 0.075594 -0.491348 +vn -0.861202 0.078341 -0.502152 +vn -0.508896 -0.130436 0.850856 +vn -0.507889 -0.144414 0.849208 +vn 0.843349 0.075594 0.531999 +vn -0.259987 0.221534 -0.939848 +vn 0.951018 0.221534 -0.215522 +vn -0.964904 -0.112796 0.237098 +vn 0.247505 -0.112796 0.962279 +vn -0.618824 0.049043 0.783959 +vn -0.612262 0.153386 0.775628 +vn -0.748527 0.080355 -0.658162 +vn 0.813990 0.080355 0.575243 +vn 0.755120 0.082369 0.650349 +vn 0.615986 0.107669 -0.780328 +vn 0.619587 0.003479 -0.784906 +vn -0.807917 0.082369 -0.583483 +vn 0.123692 0.187567 0.974425 +vn -0.976501 0.187567 0.105899 +vn 0.990509 -0.076998 -0.113804 +vn -0.119266 -0.076998 -0.989837 +vn -0.833949 0.551530 0.017335 +vn -0.796472 0.590411 -0.130314 +vn 0.086764 0.075014 -0.993378 +vn 0.082125 0.197882 0.976775 +vn -0.053041 0.088656 0.994629 +vn 0.911283 -0.389447 0.133610 +vn 0.889492 -0.456587 -0.017273 +vn 0.048341 -0.093387 -0.994446 +vn -0.659169 0.356578 0.662038 +vn -0.419263 0.551408 -0.721183 +vn 0.486770 -0.465773 0.738945 +vn 0.712943 -0.257759 -0.652089 +vn 0.427168 0.084902 0.900174 +vn 0.425123 0.129032 0.895871 +vn -0.910550 0.078707 0.405774 +vn 0.890164 0.078707 -0.448744 +vn 0.907559 0.079806 -0.412244 +vn -0.427564 0.072634 -0.901028 +vn -0.428541 0.028413 -0.903073 +vn -0.893277 0.079806 0.442305 +vn 0.935881 0.124943 0.329325 +vn -0.336741 0.124943 0.933256 +vn 0.335459 -0.013581 -0.941923 +vn -0.941801 -0.013581 -0.335795 +vn 0.628193 0.598926 0.496567 +vn 0.882717 0.424177 -0.202155 +vn 0.007080 0.424177 0.905545 +vn 0.585131 0.066683 -0.808161 +vn -0.053865 -0.329722 -0.942534 +vn -0.694266 -0.465560 -0.548814 +vn -0.929502 -0.329722 0.165166 +vn -0.651204 0.066683 0.755913 +vn -0.818506 0.572008 0.052889 +vn -0.534135 0.405103 0.741966 +vn -0.625202 0.405103 -0.667043 +vn 0.104068 0.068026 0.992218 +vn 0.681570 -0.308725 0.663411 +vn 0.898099 -0.435926 -0.058016 +vn 0.590503 -0.308725 -0.745628 +vn -0.024476 0.068026 -0.997375 +vn -0.443831 0.331767 -0.832392 +vn -0.937315 0.234962 -0.257332 +vn 0.308603 0.234962 -0.921690 +vn -0.870113 0.076205 0.486862 +vn -0.295144 -0.126988 0.946959 +vn 0.462874 -0.179296 0.868068 +vn 0.950774 -0.126988 0.282601 +vn 0.889157 0.076205 -0.451186 +vn -0.803735 0.569414 0.172460 +vn -0.421064 0.403241 0.812433 +vn -0.717338 0.403241 -0.568133 +vn 0.247932 0.068148 0.966369 +vn 0.772271 -0.306681 0.556322 +vn 0.881283 -0.433058 -0.189093 +vn 0.475997 -0.306681 -0.824213 +vn -0.170385 0.068148 -0.983001 +vn 0.238350 0.296518 -0.924772 +vn -0.514817 0.209998 -0.831141 +vn 0.852443 0.209998 -0.478713 +vn -0.969665 0.076907 -0.231971 +vn -0.858608 -0.101016 0.502548 +vn -0.247017 -0.142644 0.958434 +vn 0.508682 -0.101016 0.854976 +vn 0.960997 0.076907 0.265633 +vn -0.715812 0.448897 -0.534837 +vn -0.929533 0.317911 0.186773 +vn -0.084384 0.317911 -0.944334 +vn -0.572832 0.073031 0.816370 +vn 0.118107 -0.214454 0.969543 +vn 0.763451 -0.302805 0.570421 +vn 0.963256 -0.214454 -0.161565 +vn 0.620502 0.073031 -0.780786 +vn -0.183416 0.961821 0.203040 +vn -0.185369 0.960906 0.205512 +vn -0.695120 0.022828 -0.718528 +vn 0.784509 0.026246 0.619526 +vn 0.785485 0.023072 0.618397 +vn 0.273080 -0.913236 -0.302286 +vn 0.275369 -0.911771 -0.304666 +vn -0.695822 0.026246 -0.717704 +vn -0.184729 0.957335 0.222083 +vn -0.676901 0.015290 -0.735893 +vn 0.815821 0.037568 0.577044 +vn 0.313089 -0.884548 -0.345683 +vn -0.471511 0.874477 0.113712 +vn -0.282540 0.230873 -0.931028 +vn 0.498276 -0.355846 0.790613 +vn 0.419477 -0.706809 -0.569597 +vn -0.552171 0.738090 0.387616 +vn -0.097629 -0.511246 0.853847 +vn 0.651814 -0.663839 -0.366619 +vn 0.149937 0.585101 -0.796960 +vn -0.640492 0.645650 0.415754 +vn 0.163121 0.484664 -0.859340 +vn 0.049532 -0.500839 0.864101 +vn 0.739341 -0.623463 -0.254250 +vn -0.778649 0.508469 0.367565 +vn 0.213538 -0.205481 0.955077 +vn 0.883206 -0.436567 -0.171209 +vn -0.102695 0.307138 -0.946104 +vn -0.826838 0.497147 0.262947 +vn -0.234718 0.133427 -0.962828 +vn 0.290933 -0.005890 0.956694 +vn 0.888241 -0.370922 -0.270943 +vn -0.828669 0.459578 0.319468 +vn 0.361003 0.106632 0.926420 +vn 0.918729 -0.322001 -0.228492 +vn -0.264962 0.004578 -0.964232 +vn -0.879452 0.394910 0.265603 +vn -0.336009 -0.111087 -0.935270 +vn 0.378124 0.239845 0.894131 +vn 0.913938 -0.264290 -0.307932 +vn -0.371685 0.396435 0.839442 +vn -0.875820 0.153020 -0.457686 +vn 0.900998 -0.059542 0.429701 +vn 0.396741 -0.302683 -0.866573 +vn 0.226783 0.843593 0.486709 +vn 0.173284 0.911222 0.373669 +vn -0.944090 -0.019318 0.329081 +vn 0.859249 -0.019318 -0.511185 +vn 0.890133 0.090365 -0.446638 +vn -0.273476 -0.761986 -0.586963 +vn -0.223945 -0.847591 -0.481063 +vn -0.914701 0.091891 0.393506 +vn 0.128330 0.951781 0.278542 +vn -0.933866 0.008301 0.357494 +vn 0.874050 0.007263 -0.485733 +vn -0.182287 -0.902097 -0.391095 +vn 0.157659 0.932524 0.324839 +vn 0.855983 0.035035 -0.515763 +vn -0.217170 -0.854213 -0.472335 +vn -0.938597 0.021210 0.344279 +vn -0.025300 0.900754 0.433515 +vn -0.964293 0.253151 -0.077548 +vn 0.959990 -0.262368 -0.097690 +vn -0.388775 -0.729759 -0.562334 +vn 0.197028 0.795007 0.573687 +vn 0.796838 -0.469253 0.380535 +vn -0.126011 -0.758965 -0.638813 +vn -0.747032 0.490036 -0.449141 +vn 0.144780 0.726768 0.671407 +vn -0.786218 0.432722 -0.441084 +vn 0.857845 -0.436354 0.271401 +vn -0.003906 -0.681204 -0.732047 +vn 0.123020 0.545885 0.828761 +vn 0.987487 -0.141850 0.068697 +vn 0.167821 -0.475112 -0.863735 +vn -0.948759 0.200018 -0.244575 +vn -0.059603 0.420118 0.905484 +vn -0.997711 -0.033570 -0.058473 +vn 0.988922 0.145573 -0.028474 +vn 0.038697 -0.293222 -0.955229 +vn -0.043764 0.279031 0.959258 +vn -0.996338 -0.015717 -0.083956 +vn 0.990509 0.130894 -0.041536 +vn 0.029389 -0.143773 -0.989166 +vn 0.681143 0.167730 0.712638 +vn -0.728874 0.071780 0.680837 +vn 0.717002 0.024628 -0.696616 +vn -0.682333 -0.070528 -0.727592 +vn -0.757561 0.589190 0.280923 +vn -0.732231 0.624561 0.271523 +vn -0.302103 0.032868 -0.952696 +vn 0.392041 0.032868 0.919340 +vn 0.362194 0.056215 0.930387 +vn 0.812403 -0.499222 -0.301248 +vn 0.793237 -0.533128 -0.294137 +vn -0.331950 0.056215 -0.941588 +vn -0.606403 0.761803 0.227821 +vn 0.339610 0.088321 0.936399 +vn 0.680563 -0.686148 -0.256905 +vn -0.348094 0.084475 -0.933622 +vn -0.330912 0.925169 0.185705 +vn 0.563372 0.228675 0.793908 +vn 0.552110 -0.833247 -0.029115 +vn -0.536424 -0.066042 -0.841334 +vn -0.266976 0.961913 -0.058382 +vn -0.737510 -0.221931 -0.637806 +vn 0.777062 0.295297 0.555803 +vn 0.338786 -0.940703 -0.016511 +vn -0.273873 0.958678 -0.076937 +vn -0.719321 -0.275185 -0.637806 +vn 0.800165 0.238929 0.550096 +vn 0.326579 -0.944945 -0.020112 +vn -0.413160 0.910398 -0.020814 +vn -0.584765 -0.219031 -0.781060 +vn 0.690451 0.181158 0.700278 +vn 0.381207 -0.907224 -0.177770 +vn -0.570666 0.791681 0.218085 +vn 0.581988 0.055116 0.811304 +vn 0.624439 -0.726371 -0.287118 +vn -0.400403 -0.133152 -0.906583 +vn -0.707938 0.545640 0.448378 +vn 0.610370 0.207099 0.764519 +vn 0.818903 -0.430128 -0.379894 +vn -0.478133 -0.179601 -0.859706 +vn -0.851009 0.278390 0.445235 +vn -0.510849 -0.189215 -0.838557 +vn 0.613819 0.260109 0.745323 +vn 0.799463 -0.203711 -0.565081 +vn -0.196265 0.195318 0.960875 +vn -0.976226 0.041780 -0.212592 +vn 0.981689 0.031098 0.187841 +vn 0.199469 -0.121433 -0.972320 +vn -0.597674 0.709311 0.373669 +vn -0.507065 0.801660 0.316538 +vn -0.460646 -0.017060 -0.887387 +vn 0.596057 -0.017060 0.802728 +vn 0.521012 0.076052 0.850124 +vn 0.645344 -0.648579 -0.403485 +vn 0.560503 -0.750450 -0.350169 +vn -0.535997 0.076968 -0.840663 +vn -0.430891 0.861385 0.268899 +vn -0.492325 0.007050 -0.870357 +vn 0.567827 0.006897 0.823084 +vn 0.488723 -0.817286 -0.305185 +vn -0.493210 0.813105 0.309153 +vn -0.484085 0.010163 -0.874935 +vn 0.569597 0.009186 0.821863 +vn 0.551286 -0.758507 -0.347392 +vn -0.371502 0.859279 0.351512 +vn 0.713614 0.234474 0.660115 +vn 0.610828 -0.761376 -0.217109 +vn -0.719504 -0.107273 -0.686148 +vn -0.433851 0.883419 0.176916 +vn -0.828700 -0.316233 -0.461715 +vn 0.854579 0.342112 0.390667 +vn 0.457045 -0.853603 -0.249886 +vn -0.442061 0.875881 0.193335 +vn -0.822840 -0.315378 -0.472671 +vn 0.855739 0.335398 0.393902 +vn 0.463027 -0.843715 -0.271493 +vn -0.482131 0.731742 0.481704 +vn -0.761315 -0.421003 -0.493057 +vn 0.913938 0.284066 0.289804 +vn 0.538469 -0.659230 -0.524766 +vn -0.552293 0.406842 0.727592 +vn 0.867061 0.355358 0.349071 +vn 0.481735 -0.361095 -0.798425 +vn -0.832636 -0.316446 -0.454482 +vn -0.573077 0.344096 0.743706 +vn 0.852138 0.155522 0.499619 +vn 0.450850 -0.281137 -0.847133 +vn -0.854244 -0.071352 -0.514908 +vn 0.233802 0.226081 0.945616 +vn -0.944304 0.292611 0.150517 +vn 0.955901 -0.238563 -0.171087 +vn -0.228065 -0.168554 -0.958922 +vn 0.282693 0.917081 0.281106 +vn 0.287545 0.914090 0.285867 +vn -0.749168 0.030549 0.661641 +vn 0.659566 0.036439 -0.750755 +vn 0.656362 0.030519 -0.753807 +vn -0.372631 -0.850765 -0.370525 +vn -0.378216 -0.845363 -0.377178 +vn -0.747032 0.036439 0.663747 +vn 0.219520 0.951537 0.215247 +vn 0.663045 0.078829 -0.744377 +vn -0.315867 -0.894528 -0.316263 +vn -0.736930 0.075045 0.671743 +vn 0.093875 0.979430 0.178472 +vn -0.852718 0.073855 0.517106 +vn 0.773461 -0.044069 -0.632252 +vn -0.308267 -0.931578 -0.192663 +vn 0.195654 0.967345 0.161077 +vn 0.873562 -0.106967 -0.474776 +vn -0.245216 -0.927244 -0.282937 +vn -0.929044 0.119785 0.349986 +vn 0.206030 0.960234 0.188299 +vn 0.874355 -0.090243 -0.476791 +vn -0.258156 -0.913419 -0.314615 +vn -0.926908 0.136448 0.349528 +vn 0.309976 0.922849 0.228492 +vn 0.781671 -0.052767 -0.621448 +vn -0.247047 -0.868709 -0.429273 +vn -0.876827 0.033753 0.479598 +vn 0.387494 0.769463 0.507675 +vn -0.818537 -0.067995 0.570360 +vn 0.655690 0.024812 -0.754570 +vn -0.475692 -0.666860 -0.573565 +vn 0.600757 0.418470 0.681143 +vn 0.657613 0.089999 -0.747917 +vn -0.624439 -0.285897 -0.726829 +vn -0.814447 -0.025452 0.579638 +vn 0.607288 0.007538 0.794427 +vn 0.682882 0.038820 -0.729453 +vn -0.686605 0.141697 -0.713065 +vn -0.796655 0.119663 0.592425 +vn 0.959685 -0.274758 0.058718 +vn -0.067263 -0.025361 0.997406 +vn 0.075747 0.128819 -0.988769 +vn -0.928190 0.368053 -0.054720 +vn 0.465987 0.874783 -0.132603 +vn 0.502853 0.852412 -0.143101 +vn 0.232521 0.054048 0.971068 +vn -0.313669 0.054048 -0.947966 +vn -0.335368 0.020539 -0.941832 +vn -0.570635 -0.804956 0.162389 +vn -0.604480 -0.777795 0.172033 +vn 0.210852 0.020539 0.977294 +vn 0.506088 0.850368 -0.144017 +vn 0.233528 0.053804 0.970855 +vn -0.312693 0.053804 -0.948302 +vn -0.607593 -0.775170 0.172918 +vn 0.424116 0.897305 -0.122227 +vn -0.319956 0.054720 -0.945830 +vn -0.535051 -0.830866 0.152715 +vn 0.228339 0.051088 0.972228 +vn 0.418195 0.907254 -0.044557 +vn -0.179388 -0.072390 -0.981079 +vn -0.510147 -0.831141 0.221168 +vn 0.053285 0.108463 0.992645 +vn 0.526078 0.837001 -0.150517 +vn -0.115482 0.179083 0.977020 +vn -0.043703 -0.182531 -0.982208 +vn -0.631794 -0.766991 0.111881 +vn 0.646840 0.752861 -0.121494 +vn -0.069277 0.192602 0.978820 +vn -0.051302 -0.131596 -0.989959 +vn -0.739769 -0.665731 0.097446 +vn 0.745811 0.641224 -0.180456 +vn 0.018555 0.054781 0.998321 +vn -0.176092 -0.009400 -0.984313 +vn -0.839259 -0.542436 0.036775 +vn 0.887417 0.449873 -0.100375 +vn -0.249245 0.126713 -0.960082 +vn -0.931639 -0.333048 0.145299 +vn 0.099429 -0.051271 0.993713 +vn 0.970122 0.202582 -0.133427 +vn 0.088229 0.022309 0.995819 +vn -0.229591 0.088473 -0.969237 +vn -0.982910 -0.075442 0.167852 +vn 0.588488 0.042360 -0.807367 +vn 0.807917 0.039918 0.587909 +vn -0.813807 0.051424 -0.578814 +vn -0.593585 0.048585 0.803278 +vn -0.907010 0.370861 0.199408 +vn -0.824915 0.535295 0.181371 +vn -0.112247 0.015259 -0.993561 +vn 0.314859 0.015259 0.949004 +vn 0.165166 0.084292 0.982635 +vn 0.937346 -0.280892 -0.206091 +vn 0.870632 -0.453108 -0.191412 +vn -0.262246 0.084292 -0.961303 +vn -0.655690 0.741050 0.144505 +vn -0.205512 0.059999 -0.976806 +vn 0.220923 0.059450 0.973449 +vn 0.718772 -0.676778 -0.159093 +vn -0.579272 0.787011 0.212165 +vn 0.396680 0.164006 0.903165 +vn 0.713553 -0.696982 -0.070833 +vn -0.308451 -0.125004 -0.942961 +vn -0.556383 0.826716 0.083224 +vn -0.532151 -0.226691 -0.815699 +vn 0.522416 0.367504 0.769402 +vn 0.638203 -0.762200 -0.108005 +vn -0.493759 0.869533 -0.007721 +vn -0.513688 -0.303781 -0.802362 +vn 0.597888 0.337230 0.727165 +vn 0.563738 -0.823237 -0.066622 +vn -0.602466 0.782159 -0.158727 +vn -0.140843 -0.042055 -0.989135 +vn 0.276925 0.029237 0.960418 +vn 0.605579 -0.744407 -0.281228 +vn -0.813501 0.567553 0.126682 +vn 0.013001 -0.267251 0.963530 +vn 0.849330 -0.527299 -0.023225 +vn 0.185217 0.222205 -0.957213 +vn -0.956969 0.284585 0.056490 +vn 0.054262 -0.053163 0.997101 +vn 0.979858 -0.197638 0.028230 +vn 0.081027 0.119480 -0.989502 +vn -0.998901 -0.046632 -0.002258 +vn 0.093326 0.056764 -0.993988 +vn 0.085543 0.057588 0.994659 +vn 0.989807 0.142125 0.004456 +vn -0.690146 -0.183416 0.700034 +vn -0.684378 -0.187536 -0.704550 +vn 0.670370 0.254189 0.697104 +vn 0.676168 0.250191 -0.692923 +vn -0.069643 0.741722 0.667043 +vn -0.054872 0.852504 0.519791 +vn -0.980651 -0.041078 -0.191229 +vn 0.999023 -0.041078 0.015442 +vn 0.988586 0.088717 0.121555 +vn 0.074770 -0.693899 -0.716147 +vn 0.060335 -0.815699 -0.575274 +vn -0.992218 0.090091 -0.085726 +vn -0.031831 0.954344 0.296945 +vn -0.991272 0.035188 -0.126835 +vn 0.996216 0.034394 0.079409 +vn 0.037843 -0.932340 -0.359508 +vn -0.024842 0.966247 0.256294 +vn -0.989166 0.001495 -0.146641 +vn 0.998321 0.004669 0.057222 +vn 0.035035 -0.940977 -0.336558 +vn -0.231269 0.926450 0.296945 +vn -0.852992 0.125095 -0.506668 +vn 0.895413 -0.208930 0.393139 +vn -0.050172 -0.847835 -0.527818 +vn -0.231056 0.712973 0.662008 +vn 0.720298 -0.367077 0.588549 +vn 0.325999 -0.707266 -0.627247 +vn -0.631550 0.264748 -0.728690 +vn -0.398297 0.579913 0.710654 +vn 0.761345 -0.224677 0.608142 +vn 0.436872 -0.527024 -0.728935 +vn -0.721641 0.273721 -0.635792 +vn -0.476394 0.496078 0.725883 +vn -0.677877 0.294412 -0.673635 +vn 0.759056 -0.278695 0.588336 +vn 0.479781 -0.423719 -0.768273 +vn -0.518021 0.247230 0.818812 +vn 0.797632 -0.190558 0.572222 +vn 0.633442 -0.206610 -0.745659 +vn -0.697043 0.226630 -0.680227 +vn -0.598346 0.028382 0.800714 +vn -0.757347 0.053896 -0.650777 +vn 0.807611 0.015992 0.589465 +vn 0.638722 0.040040 -0.768364 +vn 0.116123 -0.016144 0.993072 +vn -0.990936 -0.069918 0.114597 +vn 0.986419 0.118961 -0.113163 +vn -0.115543 0.065859 -0.991089 +vn 0.043886 0.968383 -0.245460 +vn 0.037324 0.977355 -0.208167 +vn 0.970794 0.035737 0.237159 +vn -0.994385 0.002228 -0.105655 +vn -0.992553 0.036225 -0.116245 +vn -0.066652 -0.925504 0.372753 +vn -0.059755 -0.937956 0.341533 +vn 0.969359 0.002228 0.245582 +vn 0.009522 0.999512 -0.028962 +vn 0.967528 0.075716 0.241096 +vn -0.992889 0.068422 -0.097293 +vn -0.033876 -0.985748 0.164739 +vn 0.064302 0.958281 0.278390 +vn -0.847011 0.010590 -0.531419 +vn 0.196966 -0.974853 0.104190 +vn 0.743004 0.006714 0.669240 +vn -0.293527 0.925596 0.238838 +vn 0.322611 -0.053652 0.944975 +vn -0.461531 0.158483 -0.872829 +vn 0.160527 -0.964751 -0.208472 +vn -0.387219 0.878353 0.280190 +vn 0.354900 -0.159398 0.921201 +vn -0.458449 0.056825 -0.886868 +vn 0.278085 -0.932371 -0.230873 +vn -0.355235 0.822596 0.443953 +vn -0.044740 0.243721 -0.968780 +vn 0.169683 -0.984558 -0.042634 +vn -0.125034 -0.294351 0.947478 +vn -0.305307 0.926481 0.219977 +vn 0.479019 0.351878 -0.804163 +vn 0.211219 -0.934721 -0.285745 +vn -0.566637 -0.361187 0.740532 +vn -0.312326 0.871517 0.377972 +vn -0.782647 -0.374798 0.496933 +vn 0.712851 0.273537 -0.645741 +vn 0.015442 -0.944731 -0.327403 +vn -0.014496 0.804987 0.593066 +vn 0.905271 0.146336 -0.398755 +vn -0.079073 -0.736869 -0.671346 +vn -0.958251 -0.224952 0.176305 +vn 0.736106 0.575030 0.356945 +vn -0.609912 0.363933 0.703909 +vn 0.569292 -0.299783 -0.765496 +vn -0.754509 -0.505112 -0.418989 +vn -0.519578 0.812220 -0.265114 +vn -0.502365 0.825739 -0.256355 +vn 0.505570 0.032685 -0.862148 +vn -0.401440 0.032685 0.915281 +vn -0.413251 0.049135 0.909268 +vn 0.610187 -0.728477 0.311350 +vn 0.594897 -0.744224 0.303568 +vn 0.493759 0.049135 -0.868191 +vn -0.520615 0.811396 -0.265664 +vn 0.512101 0.023988 -0.858577 +vn -0.394696 0.023988 0.918485 +vn 0.611682 -0.726920 0.312113 +vn -0.593188 0.746361 -0.301645 +vn -0.397687 0.033235 0.916898 +vn 0.678426 -0.648946 0.344310 +vn 0.512833 0.033845 -0.857784 +vn -0.580706 0.781793 -0.226936 +vn -0.306253 0.198889 0.930906 +vn 0.618824 -0.671255 0.407941 +vn 0.348216 -0.043397 -0.936399 +vn -0.493362 0.813562 -0.307718 +vn 0.242225 -0.219275 -0.945097 +vn -0.126713 0.274606 0.953154 +vn 0.599536 -0.740989 0.302408 +vn -0.620472 0.710044 -0.332835 +vn 0.320444 -0.200720 -0.925748 +vn -0.126408 0.210120 0.969451 +vn 0.731590 -0.616962 0.289956 +vn -0.886258 0.433302 -0.163610 +vn -0.023469 0.364299 0.930967 +vn 0.916501 -0.249519 0.312632 +vn 0.281594 -0.322184 -0.903806 +vn -0.956420 0.082766 -0.280007 +vn 0.155034 -0.289193 -0.944609 +vn -0.105991 0.401013 0.909909 +vn 0.997589 -0.034913 0.059816 +vn -0.982391 0.068667 -0.173681 +vn -0.143010 0.165899 0.975707 +vn 0.989196 0.058138 0.134526 +vn 0.161077 -0.036744 -0.986236 +vn -0.806330 0.087832 0.584857 +vn -0.588580 -0.012482 -0.808313 +vn 0.590960 0.105411 0.799768 +vn 0.805750 0.005127 -0.592212 +vn -0.675405 0.316813 0.665914 +vn -0.630970 0.464492 0.621357 +vn -0.631489 0.032624 -0.774651 +vn 0.765648 0.032624 0.642384 +vn 0.667623 0.081027 0.740043 +vn 0.696280 -0.209418 -0.686514 +vn 0.663381 -0.360179 -0.655873 +vn -0.729362 0.083285 -0.679006 +vn -0.480087 0.736717 0.476150 +vn -0.709708 0.095492 -0.697958 +vn 0.684744 0.101138 0.721671 +vn 0.532212 -0.657796 -0.532914 +vn -0.256264 0.896054 0.362438 +vn 0.850337 0.237800 0.469405 +vn 0.539720 -0.784417 -0.305551 +vn -0.825404 -0.134404 -0.548296 +vn -0.355907 0.915922 0.185461 +vn -0.925748 -0.294626 -0.236976 +vn 0.916623 0.371960 0.146336 +vn 0.383984 -0.876034 -0.291665 +vn -0.404157 0.873501 0.271371 +vn -0.882839 -0.354503 -0.308023 +vn 0.951537 0.275216 0.137120 +vn 0.365703 -0.840541 -0.399640 +vn -0.538896 0.761437 0.360240 +vn -0.791620 -0.058962 -0.608142 +vn 0.844264 0.111606 0.524125 +vn 0.316935 -0.719657 -0.617725 +vn -0.423017 0.750511 0.507675 +vn 0.661489 -0.136876 0.737327 +vn 0.490402 -0.681753 -0.542833 +vn -0.587573 0.187353 -0.787133 +vn -0.472060 0.591540 0.653584 +vn 0.787011 -0.008850 0.616871 +vn 0.645222 -0.499405 -0.578112 +vn -0.639454 0.007630 -0.768761 +vn -0.677664 0.268593 0.684530 +vn -0.702445 -0.061159 -0.709067 +vn 0.804621 0.137974 0.577502 +vn 0.634266 -0.167150 -0.754784 +vn 0.061220 0.096133 0.993469 +vn -0.996460 0.060427 0.058260 +vn 0.996918 0.018372 -0.076266 +vn -0.055086 -0.017579 -0.998321 +vn 0.756279 0.641896 0.126286 +vn 0.660909 0.742271 0.110355 +vn -0.148350 0.072970 0.986236 +vn 0.086642 -0.010987 -0.996155 +vn 0.180120 0.072970 -0.980926 +vn -0.803369 -0.580126 -0.134129 +vn -0.716697 -0.687033 -0.119663 +vn -0.241707 -0.010987 0.970275 +vn 0.428907 0.900479 0.071596 +vn 0.159490 0.073794 -0.984405 +vn -0.496231 -0.864223 -0.082858 +vn -0.168981 0.073794 0.982849 +vn 0.213507 0.976318 0.034242 +vn 0.131321 0.050356 -0.990051 +vn -0.287576 -0.956633 -0.046358 +vn -0.201697 0.048280 0.978240 +vn -0.102451 0.980865 -0.165410 +vn -0.626545 0.159886 -0.762780 +vn -0.416089 -0.867550 -0.272408 +vn 0.469680 -0.178137 0.864650 +vn 0.333048 0.930509 -0.152318 +vn -0.972991 0.189734 -0.131382 +vn -0.278268 -0.944548 0.174230 +vn 0.916074 -0.366131 0.163549 +vn 0.345164 0.837153 -0.424268 +vn 0.917112 -0.263222 0.299264 +vn -0.957183 0.222877 -0.184637 +vn -0.324107 -0.803461 0.499344 +vn 0.220679 0.744346 -0.630207 +vn 0.911252 -0.379467 0.160039 +vn -0.936216 0.350536 -0.023774 +vn -0.401196 -0.620075 0.674184 +vn 0.326304 0.460463 -0.825526 +vn -0.911069 0.407392 0.062777 +vn -0.173070 -0.459609 0.871059 +vn 0.900784 -0.420118 0.109745 +vn 0.247810 0.335215 -0.908933 +vn 0.974090 -0.161779 0.157903 +vn -0.964476 0.231910 -0.126408 +vn -0.149724 -0.280862 0.947966 +vn -0.551225 0.311502 -0.773980 +vn 0.836146 0.167425 -0.522294 +vn -0.831538 -0.115848 0.543199 +vn 0.556597 -0.258248 0.789605 +vn -0.042512 0.990509 -0.130558 +vn -0.040407 0.991455 -0.124027 +vn 0.964171 0.011078 -0.264931 +vn -0.935301 0.005310 0.353740 +vn -0.935636 0.011444 0.352733 +vn 0.071108 -0.973235 0.218421 +vn 0.069948 -0.974425 0.213385 +vn 0.964293 0.005310 -0.264687 +vn -0.004273 0.999939 -0.009003 +vn 0.962523 0.053224 -0.265816 +vn -0.933195 0.055971 0.354961 +vn 0.034730 -0.994079 0.102786 +vn 0.083987 0.995331 0.046968 +vn -0.981872 -0.026917 0.187506 +vn 0.083560 -0.996307 0.018494 +vn 0.994964 -0.015076 -0.098880 +vn -0.005402 0.999847 0.016541 +vn 0.996368 0.006623 0.084841 +vn -0.999908 -0.004975 0.010010 +vn 0.002319 -0.996704 0.080905 +vn 0.004181 0.977691 -0.209876 +vn -0.994720 -0.093783 0.041566 +vn -0.006714 -0.950377 0.310953 +vn 0.990081 -0.080905 0.114689 +vn -0.186224 0.781518 -0.595386 +vn 0.976287 -0.199774 -0.083254 +vn -0.949767 0.097476 0.297342 +vn -0.046571 -0.691580 0.720786 +vn -0.114261 0.484573 -0.867214 +vn -0.867458 0.304636 0.393292 +vn 0.213599 -0.431806 0.876278 +vn 0.921781 -0.281655 -0.266335 +vn -0.187292 0.217383 -0.957915 +vn -0.918912 0.143132 0.367504 +vn 0.307657 -0.138676 0.941313 +vn 0.976897 -0.080782 -0.197699 +vn -0.294259 0.086428 -0.951781 +vn 0.956481 -0.005310 -0.291635 +vn -0.962127 0.099979 0.253517 +vn 0.244209 0.009644 0.969665 +vn -0.858028 0.177038 -0.482070 +vn 0.489334 0.010132 -0.872005 +vn -0.484725 0.056368 0.872829 +vn 0.866726 -0.111423 0.486129 +vn -0.428846 0.890866 0.149785 +vn -0.322459 0.939909 0.112186 +vn -0.266274 -0.032716 -0.963317 +vn 0.391400 -0.032716 0.919614 +vn 0.344493 0.067660 0.936308 +vn 0.496963 -0.850215 -0.173589 +vn 0.393902 -0.908780 -0.137608 +vn -0.312662 0.068392 -0.947386 +vn -0.159276 0.985687 0.054964 +vn -0.296121 0.031434 -0.954619 +vn 0.364635 0.030580 0.930631 +vn 0.237098 -0.967986 -0.082095 +vn 0.053255 0.998413 -0.017701 +vn 0.386120 0.071932 0.919614 +vn 0.052339 -0.998505 -0.014466 +vn -0.277108 0.074282 -0.957945 +vn 0.399976 0.892483 -0.208441 +vn 0.190588 -0.044465 -0.980651 +vn -0.065371 0.201544 0.977264 +vn -0.278085 -0.937101 -0.210883 +vn 0.519181 0.852718 0.057222 +vn 0.581011 -0.301706 -0.755882 +vn -0.539079 0.257576 0.801874 +vn -0.462233 -0.886654 -0.011322 +vn 0.419935 0.905393 -0.062014 +vn -0.588977 0.221442 0.777184 +vn -0.331095 -0.939543 0.087039 +vn 0.601306 -0.368297 -0.709037 +vn 0.423719 0.893551 -0.148228 +vn 0.806696 -0.316904 -0.498764 +vn -0.739189 0.380139 0.555925 +vn -0.215278 -0.971129 0.102664 +vn 0.346934 0.931272 -0.110935 +vn 0.893338 -0.386944 -0.228431 +vn -0.896664 0.304819 0.321024 +vn -0.290597 -0.939543 0.181036 +vn 0.370434 0.877773 -0.303690 +vn -0.957640 0.269082 0.102451 +vn -0.181494 -0.908719 0.375835 +vn 0.945158 -0.326456 0.008820 +vn -0.499435 0.774651 -0.387860 +vn 0.875057 0.452773 -0.170934 +vn -0.870540 -0.435682 0.228614 +vn 0.501297 -0.746117 0.438124 +vn -0.355541 0.579730 0.733116 +vn -0.331400 0.650472 0.683401 +vn -0.874844 0.003204 -0.484359 +vn 0.922025 0.003204 0.387097 +vn 0.893765 0.051302 0.445540 +vn 0.371197 -0.525651 -0.765404 +vn 0.349834 -0.598865 -0.720359 +vn -0.903562 0.050966 -0.425336 +vn -0.253945 0.810266 0.528123 +vn 0.893490 0.075869 0.442579 +vn 0.281014 -0.764275 -0.580401 +vn -0.901425 0.071993 -0.426832 +vn -0.311380 0.870083 0.382031 +vn -0.723716 0.173345 -0.667959 +vn 0.775750 -0.188147 0.602283 +vn 0.144383 -0.789819 -0.596057 +vn -0.234474 0.831660 0.503311 +vn 0.531022 -0.316263 0.786096 +vn 0.275704 -0.802332 -0.529313 +vn -0.492019 0.358592 -0.793268 +vn -0.213630 0.838130 0.501846 +vn -0.477096 0.351756 -0.805353 +vn 0.535936 -0.327952 0.777917 +vn 0.273141 -0.808191 -0.521683 +vn -0.502029 0.662313 0.556108 +vn -0.364269 0.299600 -0.881771 +vn 0.562212 -0.441023 0.699545 +vn 0.523942 -0.598315 -0.606189 +vn -0.721152 0.280282 0.633534 +vn 0.545701 -0.302561 0.781426 +vn 0.802240 -0.256386 -0.539079 +vn -0.449080 0.337474 -0.827265 +vn -0.782952 0.114231 0.611469 +vn -0.521836 0.134281 -0.842372 +vn 0.595752 -0.077120 0.799432 +vn 0.844508 -0.059999 -0.532151 +vn -0.821589 0.035249 0.568957 +vn -0.570574 0.032014 -0.820582 +vn 0.566881 0.032838 0.823115 +vn 0.822260 0.029603 -0.568316 +vn -0.178991 0.029756 0.983367 +vn -0.983428 0.027680 -0.179113 +vn 0.983642 0.018403 0.179052 +vn 0.179113 0.016297 -0.983673 +vn 0.874752 0.444441 -0.192969 +vn 0.842647 0.505295 -0.185888 +vn 0.221503 0.055788 0.973540 +vn -0.263833 0.028596 -0.964110 +vn -0.208655 0.055788 -0.976379 +vn -0.911069 -0.359844 0.200995 +vn -0.885098 -0.422437 0.195257 +vn 0.166295 0.028596 0.985656 +vn 0.718650 0.677023 -0.158544 +vn 0.234840 0.078280 0.968871 +vn -0.194586 0.078280 -0.977722 +vn -0.778191 -0.604083 0.171667 +vn 0.531846 0.838954 -0.115085 +vn -0.230171 0.063173 -0.971068 +vn -0.609943 -0.781121 0.133274 +vn 0.198431 0.068392 0.977722 +vn 0.427381 0.880398 -0.205420 +vn 0.390576 -0.157353 0.907010 +vn -0.481887 0.172552 -0.859035 +vn -0.614215 -0.788995 0.014405 +vn 0.607593 0.780297 -0.148015 +vn -0.651662 0.296884 -0.697958 +vn -0.629383 -0.742271 0.229896 +vn 0.555773 -0.317179 0.768426 +vn 0.748497 0.591601 -0.299570 +vn -0.634999 0.215094 -0.741935 +vn -0.744346 -0.534440 0.400342 +vn 0.475356 -0.236518 0.847377 +vn 0.799341 0.369823 -0.473525 +vn 0.502304 -0.173803 0.847011 +vn -0.583667 0.230934 -0.778436 +vn -0.837977 -0.278298 0.469375 +vn 0.854579 0.207221 -0.476119 +vn -0.573290 0.216346 -0.790246 +vn -0.821497 -0.129215 0.555315 +vn 0.513718 -0.137120 0.846919 +vn 0.847835 0.102390 -0.520249 +vn 0.523972 -0.025178 0.851344 +vn -0.554765 0.115207 -0.823969 +vn -0.833979 -0.012238 0.551622 +vn 0.213630 0.072573 -0.974181 +vn 0.976257 0.017121 0.215827 +vn -0.976501 0.048189 -0.209906 +vn -0.213599 -0.007172 0.976867 +vn -0.278359 0.734062 -0.619373 +vn -0.282052 0.725883 -0.627277 +vn 0.921018 0.032044 -0.388165 +vn -0.901730 0.032014 0.431043 +vn -0.898434 0.024415 0.438368 +vn 0.301126 -0.678487 0.670003 +vn 0.305368 -0.668264 0.678304 +vn 0.924619 0.024445 -0.380047 +vn -0.244331 0.805109 -0.540452 +vn 0.909055 0.075198 -0.409742 +vn -0.908292 0.081301 0.410321 +vn 0.271493 -0.753105 0.599231 +vn 0.065371 0.869991 -0.488693 +vn -0.851466 -0.523911 0.021607 +vn 0.463607 -0.585955 0.664602 +vn 0.890957 0.402539 0.210089 +vn -0.140690 0.657125 -0.740501 +vn 0.385357 0.711936 0.587024 +vn -0.436476 -0.705191 -0.558702 +vn 0.069948 -0.648122 0.758293 +vn -0.126041 0.662496 -0.738365 +vn -0.467086 -0.697226 -0.543748 +vn 0.044557 -0.642415 0.765038 +vn 0.390606 0.717368 0.576861 +vn 0.285409 0.479476 -0.829798 +vn -0.536790 -0.753197 -0.380108 +vn -0.362133 -0.434309 0.824732 +vn 0.329447 0.618549 0.713309 +vn 0.614093 0.092257 -0.783776 +vn 0.526109 0.613849 0.588488 +vn -0.574816 -0.565477 -0.591388 +vn -0.717215 -0.119816 0.686453 +vn 0.612781 0.133580 -0.778863 +vn -0.669057 -0.314951 -0.673147 +vn -0.714652 -0.101169 0.692099 +vn 0.665670 0.391186 0.635456 +vn 0.629963 0.125034 -0.766472 +vn -0.747185 -0.102084 -0.656697 +vn -0.705954 -0.059877 0.705710 +vn 0.694906 0.173742 0.697775 +vn -0.045473 0.018220 -0.998779 +vn 0.996368 0.075289 -0.039613 +vn -0.999054 -0.020173 0.037996 +vn 0.036439 0.036958 0.998627 +vn -0.233528 0.947020 -0.220466 +vn -0.218696 0.953734 -0.206183 +vn 0.703726 0.017975 -0.710196 +vn -0.664693 0.000244 0.747093 +vn -0.669118 0.018494 0.742912 +vn 0.271432 -0.927702 0.256233 +vn 0.258492 -0.934843 0.243324 +vn 0.707663 0.000244 -0.706534 +vn -0.080325 0.993896 -0.075350 +vn 0.696524 0.081423 -0.712851 +vn -0.670888 0.082217 0.736961 +vn 0.122318 -0.985778 0.114994 +vn 0.191778 0.965819 0.174200 +vn -0.648213 0.071261 0.758110 +vn -0.151097 -0.979736 -0.131413 +vn 0.722953 0.082583 -0.685903 +vn 0.570360 0.640645 0.514023 +vn -0.854488 0.445387 0.267312 +vn 0.048402 -0.856533 -0.513749 +vn 0.959563 -0.276162 -0.054476 +vn 0.196509 0.641713 0.741325 +vn 0.556810 -0.690939 0.461013 +vn -0.593616 0.671010 -0.444227 +vn -0.230903 -0.664235 -0.710929 +vn 0.244453 0.648396 0.720969 +vn -0.556871 0.678060 -0.479690 +vn -0.267037 -0.691946 -0.670705 +vn 0.501206 -0.719199 0.481124 +vn 0.238990 0.601733 0.762078 +vn -0.339671 0.758660 -0.555895 +vn -0.235847 -0.734703 -0.636036 +vn 0.301309 -0.724021 0.620441 +vn 0.267678 0.620441 0.737114 +vn -0.053621 0.683035 -0.728385 +vn -0.319041 -0.697836 -0.641224 +vn -0.031617 -0.747398 0.663594 +vn 0.280648 0.632038 0.722312 +vn -0.251320 -0.602649 0.757347 +vn 0.229347 0.683645 -0.692831 +vn -0.358837 -0.683462 -0.635670 +vn 0.395276 0.917966 -0.032228 +vn -0.110691 0.082461 0.990417 +vn 0.075228 -0.067354 -0.994873 +vn -0.431471 -0.901456 0.033998 +vn 0.730827 0.660665 0.171422 +vn 0.639485 0.753990 0.149998 +vn -0.221137 0.077059 0.972167 +vn 0.147618 -0.004028 -0.989013 +vn 0.234199 0.077059 -0.969115 +vn -0.788842 -0.586047 -0.185034 +vn -0.708182 -0.686178 -0.166112 +vn -0.307566 -0.004028 0.951506 +vn 0.397839 0.912900 0.091189 +vn 0.204688 0.089755 -0.974670 +vn -0.491470 -0.863186 -0.115482 +vn -0.244514 0.084323 0.965941 +vn 0.121281 0.986816 0.106906 +vn 0.493728 -0.047487 -0.868313 +vn -0.361400 -0.926572 0.104038 +vn -0.554277 0.151128 0.818476 +vn 0.082034 0.987915 -0.131443 +vn 0.769860 -0.114597 -0.627796 +vn -0.141057 -0.987152 0.074740 +vn -0.807306 0.186865 0.559740 +vn 0.053194 0.982116 -0.180425 +vn -0.827937 0.133122 0.544755 +vn 0.760643 -0.172460 -0.625813 +vn -0.107517 -0.989074 0.100528 +vn 0.124516 0.889706 -0.439161 +vn 0.039735 -0.106204 -0.993530 +vn -0.225227 -0.940855 -0.252968 +vn -0.245430 0.030000 0.968932 +vn 0.493088 0.860073 -0.130650 +vn -0.646809 0.114048 -0.754051 +vn -0.492813 -0.849300 0.189093 +vn 0.533616 -0.260353 0.804621 +vn 0.574877 0.619556 -0.534440 +vn 0.561174 -0.375683 0.737510 +vn -0.765465 0.319681 -0.558397 +vn -0.779107 -0.455824 0.430311 +vn 0.771294 0.213538 -0.599536 +vn -0.713370 0.461226 -0.527543 +vn -0.639729 -0.200934 0.741844 +vn 0.670797 -0.394513 0.627979 +vn -0.017273 0.298990 -0.954070 +vn 0.997833 -0.062288 -0.019929 +vn -0.990966 0.123936 0.050996 +vn 0.028413 -0.235267 0.971496 +vn 0.925962 0.377575 0.000183 +vn 0.842311 0.538957 0.000153 +vn 0.054476 0.071322 0.995941 +vn -0.096133 0.001679 -0.995361 +vn 0.054903 0.071322 -0.995911 +vn -0.949736 -0.313028 -0.000183 +vn -0.875576 -0.483047 -0.000183 +vn -0.096561 0.001679 0.995300 +vn 0.753075 0.657888 0.000153 +vn -0.037324 0.014557 -0.999176 +vn -0.796411 -0.604724 -0.000153 +vn -0.037751 0.014557 0.999176 +vn 0.802118 0.597156 0.000427 +vn -0.034303 0.021088 0.999176 +vn -0.033296 0.020112 -0.999237 +vn -0.842769 -0.538224 0.000000 +vn 0.761986 0.643239 -0.074801 +vn 0.136906 -0.113376 0.984069 +vn -0.117893 0.215155 -0.969420 +vn -0.826472 -0.554399 -0.097720 +vn 0.741447 0.669668 0.042238 +vn -0.273568 0.336375 -0.901089 +vn -0.780328 -0.625324 -0.004334 +vn 0.215247 -0.303873 0.928068 +vn 0.835383 0.549577 0.007965 +vn -0.272347 0.257820 -0.927000 +vn -0.858150 -0.508377 0.071169 +vn 0.136937 -0.263924 0.954741 +vn 0.936369 0.348613 -0.040620 +vn 0.085269 -0.101474 0.991150 +vn -0.195135 0.135990 -0.971282 +vn -0.945738 -0.294290 0.137516 +vn 0.971282 0.214118 -0.103519 +vn 0.087497 0.010743 0.996094 +vn -0.136967 0.050935 -0.989257 +vn -0.983123 -0.145665 0.110477 +vn 0.985961 0.148198 -0.076479 +vn -0.117832 -0.019196 -0.992828 +vn -0.987793 -0.075259 0.136143 +vn 0.086276 0.086123 0.992523 +vn 0.631306 -0.002289 -0.775506 +vn 0.762688 0.171972 0.623463 +vn -0.769616 -0.122929 -0.626514 +vn -0.634938 0.051363 0.770806 +vn -0.189093 0.275521 -0.942473 +vn -0.176244 0.448744 -0.876095 +vn 0.963897 0.061586 -0.258980 +vn -0.957335 0.006226 0.288797 +vn -0.989135 0.062716 0.132756 +vn 0.191931 -0.219153 0.956603 +vn 0.180670 -0.396954 0.899869 +vn 0.994659 0.006226 -0.102847 +vn -0.142155 0.689352 -0.710288 +vn -0.981780 0.052919 0.182379 +vn 0.150212 -0.644215 0.749931 +vn 0.976318 0.055330 -0.209113 +vn -0.211524 0.740532 -0.637806 +vn 0.944304 -0.145207 -0.295236 +vn -0.920316 0.153844 0.359569 +vn 0.057955 -0.675619 0.734947 +vn -0.085391 0.801752 -0.591510 +vn 0.814142 -0.243049 -0.527329 +vn -0.790521 0.384869 0.476302 +vn 0.074801 -0.750084 0.657063 +vn -0.011719 0.817286 -0.576067 +vn -0.767876 0.308023 0.561632 +vn 0.075961 -0.800317 0.594684 +vn 0.808466 -0.349925 -0.473190 +vn -0.023682 0.759606 -0.649922 +vn 0.899960 -0.209784 -0.382153 +vn -0.873012 0.249428 0.419050 +vn 0.165563 -0.752220 0.637745 +vn -0.144780 0.627064 -0.765374 +vn -0.921842 0.061769 0.382580 +vn 0.191626 -0.584918 0.788079 +vn 0.970946 -0.135258 -0.197302 +vn -0.181616 0.379864 -0.907010 +vn 0.979797 0.017090 -0.199225 +vn -0.961150 0.014924 0.275491 +vn 0.256020 -0.325938 0.910031 +vn -0.261849 0.111698 -0.958586 +vn 0.990234 0.044801 -0.131901 +vn -0.947356 -0.000092 0.320170 +vn 0.209571 -0.053224 0.976318 +vn -0.848323 -0.046876 -0.527360 +vn 0.516617 -0.098453 -0.850520 +vn -0.512619 0.139500 0.847194 +vn 0.844264 0.089084 0.528428 +vn -0.439436 0.804468 0.399579 +vn -0.314432 0.905271 0.285562 +vn -0.611408 -0.059053 -0.789087 +vn 0.727592 -0.059053 0.683432 +vn 0.657063 0.090945 0.748314 +vn 0.468978 -0.773400 -0.426435 +vn 0.347728 -0.882595 -0.316324 +vn -0.682150 0.091494 -0.725455 +vn -0.051119 0.997620 0.045595 +vn -0.657521 0.078799 -0.749290 +vn 0.683950 0.078097 0.725303 +vn 0.087039 -0.993042 -0.079043 +vn 0.114963 0.988708 -0.095981 +vn -0.642842 0.003693 -0.765984 +vn 0.701407 0.018067 0.712485 +vn -0.062288 -0.996979 0.045808 +vn 0.504379 0.658895 -0.558061 +vn 0.979247 -0.201086 -0.025056 +vn 0.189459 -0.849391 0.492538 +vn -0.741844 0.554491 -0.377087 +vn 0.093936 0.511673 -0.853999 +vn -0.357646 0.717429 0.597797 +vn 0.350261 -0.793603 -0.497452 +vn -0.043794 -0.635975 0.770440 +vn 0.303720 0.525834 -0.794488 +vn -0.058016 0.734550 0.676046 +vn -0.034730 -0.804498 -0.592883 +vn -0.351848 -0.649220 0.674306 +vn 0.383892 0.506699 -0.771905 +vn 0.332072 0.647359 0.686026 +vn -0.362774 -0.605457 -0.708365 +vn -0.488968 -0.591815 0.640797 +vn 0.454787 0.495743 -0.739830 +vn -0.609302 -0.431623 -0.665120 +vn -0.536851 -0.494583 0.683493 +vn 0.526811 0.420240 0.738792 +vn 0.609210 0.301248 -0.733543 +vn -0.696463 -0.303140 -0.650380 +vn -0.658132 -0.267861 0.703635 +vn 0.592944 0.313089 0.741844 +vn 0.012848 -0.063478 -0.997894 +vn 0.950316 0.310923 -0.013398 +vn -0.960967 -0.276254 0.012879 +vn -0.028230 0.096713 0.994903 +vn -0.330638 0.685934 0.648183 +vn -0.325510 0.697775 0.638050 +vn -0.881802 0.009949 -0.471480 +vn 0.899350 0.009949 0.437086 +vn 0.894559 0.019990 0.446455 +vn 0.343028 -0.655782 -0.672475 +vn 0.338389 -0.667684 -0.663045 +vn -0.886685 0.019990 -0.461867 +vn -0.283151 0.780480 0.557329 +vn 0.883969 0.052339 0.464583 +vn 0.299783 -0.750542 -0.588885 +vn -0.895108 0.050264 -0.442915 +vn -0.378155 0.802210 0.461959 +vn -0.728294 0.169012 -0.664052 +vn 0.777795 -0.215522 0.590381 +vn 0.205420 -0.730796 -0.650929 +vn -0.350993 0.709098 0.611499 +vn 0.570757 -0.357982 0.738945 +vn 0.381634 -0.689718 -0.615284 +vn -0.539506 0.369732 -0.756432 +vn -0.433393 0.605121 0.667776 +vn -0.564043 0.290323 -0.773003 +vn 0.646962 -0.330271 0.687277 +vn 0.498764 -0.593402 -0.631703 +vn -0.640858 0.298532 0.707205 +vn -0.574175 0.214331 -0.790155 +vn 0.731925 -0.239479 0.637867 +vn 0.673391 -0.268654 -0.688711 +vn -0.714469 0.060854 0.696982 +vn 0.676962 -0.158879 0.718619 +vn 0.733787 -0.024140 -0.678915 +vn -0.667318 0.199011 -0.717673 +vn -0.673421 -0.054903 0.737175 +vn 0.712638 0.031007 0.700797 +vn 0.773705 0.097049 -0.626057 +vn -0.638325 0.017823 -0.769524 +vn -0.735649 -0.131077 0.664510 +vn -0.681753 -0.117710 -0.722007 +vn 0.645131 0.151341 0.748894 +vn 0.703726 0.165777 -0.690817 +vn -0.043184 0.007172 0.999023 +vn -0.991028 -0.127079 -0.040651 +vn 0.986969 0.155492 0.040773 +vn 0.037446 0.021027 -0.999054 +vn -0.103946 0.458937 0.882351 +vn -0.106967 0.405957 0.907590 +vn -0.988067 0.017792 -0.152898 +vn 0.990814 0.039308 0.129246 +vn 0.996551 0.017853 0.080721 +vn 0.106998 -0.404736 -0.908139 +vn 0.109684 -0.349895 -0.930326 +vn -0.993713 0.039308 -0.104556 +vn -0.105289 0.435621 0.893918 +vn 0.988708 0.045198 0.142735 +vn 0.108585 -0.379925 -0.918607 +vn -0.994873 0.044923 -0.090457 +vn -0.091311 0.619037 0.780023 +vn 0.987976 0.057405 0.143406 +vn 0.095706 -0.571306 -0.815088 +vn -0.994140 0.057466 -0.091281 +vn 0.035981 0.714469 0.698691 +vn 0.959166 0.257393 -0.116947 +vn 0.227912 -0.600482 -0.766442 +vn -0.970367 -0.236763 0.047884 +vn -0.097934 0.593310 0.798975 +vn -0.874783 -0.435499 0.212226 +vn 0.849055 0.436689 -0.297189 +vn 0.024567 -0.574053 -0.818415 +vn -0.031922 0.522904 0.851772 +vn 0.887600 0.392773 -0.240455 +vn -0.016572 -0.484695 -0.874508 +vn -0.913755 -0.361827 0.184576 +vn 0.136509 0.313883 0.939573 +vn -0.904965 -0.411664 0.107273 +vn 0.852870 0.405560 -0.328806 +vn -0.108127 -0.235633 -0.965789 +vn 0.117710 0.027131 0.992676 +vn 0.924558 0.309763 -0.221809 +vn -0.311167 -0.020325 -0.950133 +vn -0.945311 -0.250923 0.208289 +vn 0.262246 -0.028565 0.964568 +vn 0.953032 0.170537 -0.250160 +vn -0.208319 0.095798 -0.973327 +vn -0.974944 -0.108310 0.194220 +vn 0.844783 0.075747 0.529649 +vn -0.505173 -0.221137 0.834193 +vn 0.497848 0.262185 -0.826655 +vn -0.850032 -0.033479 -0.525651 +vn 0.004700 0.238472 -0.971129 +vn 0.004730 0.184790 -0.982757 +vn 0.999512 0.026704 -0.015687 +vn -0.999298 0.026704 -0.025361 +vn -0.999573 0.017243 0.023316 +vn -0.004730 -0.196356 0.980499 +vn -0.004822 -0.142308 0.989807 +vn 0.999298 0.017121 0.032929 +vn 0.004730 0.104038 -0.994537 +vn 0.999603 0.020783 0.018372 +vn -0.999725 0.020447 0.008515 +vn -0.004761 -0.060823 0.998108 +vn -0.012665 0.161168 -0.986816 +vn 0.999207 -0.018159 -0.035371 +vn -0.996826 0.072237 -0.032991 +vn -0.026795 -0.115543 0.992920 +vn 0.007111 0.390210 -0.920682 +vn 0.990661 -0.104190 -0.087588 +vn -0.980407 0.195227 -0.025880 +vn -0.057588 -0.341533 0.938078 +vn 0.061434 0.449232 -0.891263 +vn -0.979919 0.180670 0.084078 +vn -0.023133 -0.416547 0.908811 +vn 0.984558 -0.174932 0.002380 +vn 0.045595 0.189123 -0.980865 +vn -0.991211 0.083041 0.102664 +vn 0.024567 -0.151311 0.988159 +vn 0.994476 -0.069735 0.078127 +vn 0.009735 0.119816 -0.992737 +vn 0.998016 0.039125 -0.049226 +vn -0.998108 0.014069 -0.059725 +vn 0.004303 -0.077944 0.996918 +vn -0.035340 0.101016 -0.994232 +vn -0.995514 0.066713 0.066836 +vn -0.034181 -0.053713 0.997955 +vn 0.996826 -0.033235 0.072085 +vn 0.090030 0.078921 -0.992798 +vn 0.993255 0.108310 -0.041200 +vn -0.995544 -0.059755 -0.072878 +vn 0.099246 -0.019501 0.994842 +vn -0.697104 -0.072420 -0.713279 +vn 0.661000 0.348827 -0.664327 +vn -0.668569 -0.320841 0.670827 +vn 0.692953 0.103580 0.713462 +vn -0.198767 0.395093 0.896847 +vn -0.192541 0.457656 0.868007 +vn -0.968078 0.001648 -0.250618 +vn 0.983306 0.001648 0.181860 +vn 0.971221 0.027558 0.236488 +vn 0.201239 -0.367504 -0.907956 +vn 0.195654 -0.429853 -0.881436 +vn -0.980285 0.027619 -0.195502 +vn -0.160222 0.674032 0.721061 +vn 0.960418 0.069094 0.269814 +vn 0.164708 -0.651631 -0.740410 +vn -0.984497 0.069979 -0.160741 +vn -0.127415 0.812860 0.568316 +vn -0.974181 0.014618 -0.225227 +vn 0.978484 0.012329 0.205908 +vn 0.132694 -0.794488 -0.592547 +vn 0.143406 0.748619 0.647267 +vn 0.916562 0.313944 -0.247658 +vn 0.283914 -0.569811 -0.771142 +vn -0.897671 -0.436445 0.060335 +vn 0.026124 0.516526 0.855861 +vn -0.604755 -0.670705 0.429365 +vn 0.582080 0.677206 -0.450026 +vn -0.060549 -0.515061 -0.855007 +vn 0.077303 0.411206 0.908231 +vn -0.730522 -0.584094 0.353710 +vn 0.695944 0.561693 -0.447340 +vn -0.189123 -0.463576 -0.865627 +vn 0.284738 0.269143 0.920011 +vn 0.766442 0.474044 -0.433332 +vn -0.290201 -0.237800 -0.926939 +vn -0.817316 -0.479629 0.319224 +vn 0.287179 0.071688 0.955168 +vn -0.879971 -0.311899 0.358226 +vn 0.853420 0.335643 -0.398663 +vn -0.442274 -0.097995 -0.891476 +vn 0.308817 0.045839 0.949980 +vn 0.924284 -0.005158 -0.381634 +vn -0.444533 -0.013092 -0.895657 +vn -0.926725 0.034577 0.374065 +vn 0.915281 -0.105045 0.388806 +vn -0.383374 0.156529 0.910215 +vn 0.384472 -0.135563 -0.913114 +vn -0.912748 0.126011 -0.388562 +vn -0.422315 0.902829 0.080599 +vn -0.398022 0.914212 0.075961 +vn -0.167730 -0.004151 -0.985809 +vn 0.207160 -0.004151 0.978271 +vn 0.196753 0.017975 0.980285 +vn 0.450697 -0.888485 -0.086032 +vn 0.426801 -0.900662 -0.081454 +vn -0.178137 0.017975 -0.983825 +vn -0.372173 0.925504 0.069796 +vn -0.170446 0.008179 -0.985321 +vn 0.206244 0.005982 0.978454 +vn 0.406354 -0.910520 -0.076022 +vn -0.319254 0.939879 -0.121189 +vn 0.253090 0.185827 -0.949400 +vn -0.227363 -0.177587 0.957457 +vn 0.444258 -0.856563 -0.262459 +vn -0.316324 0.941771 0.113804 +vn 0.643880 0.341960 -0.684408 +vn -0.642109 -0.280557 0.713401 +vn 0.351939 -0.930143 -0.104465 +vn -0.402783 0.912107 0.075961 +vn -0.581286 -0.363231 0.728111 +vn 0.395947 -0.918119 -0.016602 +vn 0.662160 0.239265 -0.710105 +vn -0.622272 0.727378 -0.289254 +vn -0.527390 -0.397534 0.750847 +vn 0.676687 -0.688101 0.261849 +vn 0.714988 0.229835 -0.660268 +vn -0.762810 0.452864 -0.461501 +vn -0.621357 -0.333201 0.709128 +vn 0.745567 -0.437666 0.502518 +vn 0.660207 0.339854 -0.669759 +vn -0.815699 0.234962 -0.528550 +vn 0.693533 0.185766 -0.696036 +vn -0.560076 -0.194037 0.805383 +vn 0.748436 -0.225532 0.623615 +vn -0.814905 0.000000 -0.579577 +vn -0.594775 0.043397 0.802698 +vn 0.760613 0.034516 0.648274 +vn 0.639729 -0.010285 -0.768517 +vn -0.991852 0.043306 0.119724 +vn -0.120823 -0.134648 -0.983490 +vn 0.120579 0.157079 0.980163 +vn 0.992492 -0.020356 -0.120548 +vn 0.462600 0.340190 -0.818659 +vn 0.423231 0.509110 -0.749413 +vn 0.899747 0.054689 0.432936 +vn -0.910489 -0.014130 -0.413221 +vn -0.834925 0.055147 -0.547533 +vn -0.467452 -0.311563 0.827265 +vn -0.430403 -0.483535 0.762169 +vn 0.823756 -0.014130 0.566759 +vn 0.385052 0.621754 -0.681997 +vn -0.883999 -0.002747 -0.467422 +vn -0.393963 -0.598407 0.697623 +vn 0.856288 -0.003021 0.516434 +vn 0.392621 0.603351 -0.694113 +vn 0.871212 0.020936 0.490432 +vn -0.869900 0.020508 -0.492752 +vn -0.401898 -0.577654 0.710440 +vn 0.373577 0.747276 -0.549486 +vn -0.774132 -0.070620 -0.629017 +vn -0.253365 -0.700674 0.666921 +vn 0.804224 0.195166 0.561327 +vn 0.252907 0.789026 -0.559862 +vn -0.710532 -0.261910 -0.653066 +vn -0.285836 -0.777154 0.560625 +vn 0.674490 0.230384 0.701376 +vn 0.343486 0.699759 -0.626331 +vn 0.699179 0.203955 0.685171 +vn -0.742759 -0.230140 -0.628742 +vn -0.377758 -0.682882 0.625233 +vn 0.380444 0.552568 -0.741508 +vn 0.779229 0.056520 0.624165 +vn -0.836970 -0.086032 -0.540391 +vn -0.511765 -0.537950 0.669820 +vn 0.529191 0.313730 -0.788354 +vn -0.883663 0.041963 -0.466201 +vn -0.512223 -0.286355 0.809687 +vn 0.804865 -0.056734 0.590716 +vn 0.535661 0.105533 -0.837794 +vn 0.830531 -0.009247 0.556841 +vn -0.856502 0.035554 -0.514878 +vn -0.535813 -0.075076 0.840968 +vn -0.216956 0.052950 -0.974731 +vn 0.975951 0.022645 -0.216681 +vn -0.975829 -0.000946 0.218421 +vn 0.216132 -0.031220 0.975860 +vn 0.710807 0.446760 0.543260 +vn 0.655080 0.565691 0.500778 +vn -0.569506 0.043458 0.820826 +vn 0.556566 -0.018464 -0.830561 +vn 0.642506 0.043275 -0.765038 +vn -0.718070 -0.427900 -0.548814 +vn -0.664266 -0.548509 -0.507767 +vn -0.655324 -0.018464 0.755089 +vn 0.553819 0.717795 0.421918 +vn -0.601611 0.027192 0.798303 +vn 0.612842 0.029328 -0.789636 +vn -0.570208 -0.697043 -0.434675 +vn 0.401013 0.672903 0.621570 +vn -0.822016 0.329356 0.464522 +vn 0.685903 -0.435163 -0.583209 +vn -0.752098 -0.506485 -0.421644 +vn 0.572497 0.506546 0.644673 +vn 0.703818 -0.705985 -0.078555 +vn -0.605914 -0.459517 -0.649342 +vn -0.676199 0.730674 0.093936 +vn 0.618885 0.413495 0.667806 +vn 0.703665 -0.686728 -0.182165 +vn -0.516312 -0.488784 -0.703177 +vn -0.744438 0.659261 0.105625 +vn 0.610187 0.306253 0.730644 +vn 0.824580 -0.398480 -0.401563 +vn -0.431257 -0.373333 -0.821345 +vn -0.847530 0.397839 0.351268 +vn 0.531816 0.201453 0.822504 +vn -0.886624 0.122227 0.445998 +vn 0.839412 -0.119907 -0.530045 +vn -0.481002 -0.187964 -0.856319 +vn 0.513138 0.097690 0.852718 +vn 0.861721 -0.026460 -0.506638 +vn -0.497452 -0.077395 -0.864009 +vn -0.863796 0.047090 0.501572 +vn 0.512040 0.016633 0.858791 +vn -0.879910 0.011536 0.474960 +vn 0.844386 0.009186 -0.535600 +vn -0.500351 0.004486 -0.865780 +vn 0.967071 -0.033784 0.252174 +vn -0.251625 -0.053529 0.966308 +vn 0.251350 0.068453 -0.965453 +vn -0.966460 0.048769 -0.252083 +vn 0.779107 0.516923 0.354595 +vn 0.722160 0.608600 0.328654 +vn -0.383465 0.039491 0.922697 +vn 0.367687 -0.015748 -0.929807 +vn 0.443861 0.039491 -0.895199 +vn -0.790094 -0.496384 -0.359569 +vn -0.734916 -0.589892 -0.334483 +vn -0.459578 -0.015748 0.887967 +vn 0.675283 0.670431 0.307321 +vn 0.396924 -0.000671 -0.917814 +vn -0.689749 -0.652425 -0.313913 +vn -0.431349 -0.000671 0.902158 +vn 0.569842 0.779839 0.259072 +vn -0.372845 0.074740 0.924863 +vn 0.452406 0.075350 -0.888607 +vn -0.589343 -0.762108 -0.268014 +vn 0.305979 0.927671 0.213874 +vn 0.610187 -0.090152 -0.787072 +vn -0.462447 -0.885617 -0.042268 +vn -0.597217 0.168004 0.784265 +vn 0.347301 0.933561 0.088382 +vn 0.751640 -0.232917 -0.617054 +vn -0.354076 -0.928739 -0.109684 +vn -0.773370 0.212897 0.597125 +vn 0.450453 0.866634 0.214484 +vn -0.774468 0.154149 0.613483 +vn 0.703940 -0.256752 -0.662191 +vn -0.439131 -0.862209 -0.252388 +vn 0.665365 0.736290 0.122868 +vn 0.364666 0.109592 -0.924650 +vn -0.510788 -0.665426 -0.544267 +vn -0.438643 -0.157750 0.884671 +vn 0.758538 0.509384 0.406323 +vn 0.051363 0.386486 -0.920835 +vn -0.786767 -0.539354 -0.300088 +vn -0.174169 -0.443525 0.879147 +vn 0.803644 0.448927 0.390576 +vn -0.252022 -0.182531 0.950316 +vn 0.286843 0.228492 -0.930296 +vn -0.849208 -0.454207 -0.269326 +vn 0.797266 0.421461 -0.432081 +vn 0.315836 0.305918 0.898129 +vn -0.325022 -0.291879 -0.899503 +vn -0.804956 -0.406171 0.432478 +vn -0.689566 0.657247 0.304117 +vn -0.715018 0.623920 0.315348 +vn -0.382611 -0.002869 -0.923887 +vn 0.396283 0.021821 0.917844 +vn 0.424238 -0.002869 0.905515 +vn 0.703269 -0.639668 -0.310160 +vn 0.728202 -0.605396 -0.321177 +vn -0.410565 0.021821 -0.911557 +vn -0.684103 0.664357 0.301004 +vn 0.380749 0.037263 0.923887 +vn 0.698569 -0.646199 -0.307199 +vn -0.426405 0.038270 -0.903714 +vn -0.599780 0.787866 0.139470 +vn -0.157903 0.260506 -0.952452 +vn 0.154393 -0.217750 0.963683 +vn 0.569353 -0.697562 -0.434950 +vn -0.415021 0.858455 0.301218 +vn -0.226661 -0.381420 0.896146 +vn 0.449507 -0.820276 -0.353587 +vn 0.189795 0.499191 -0.845424 +vn -0.290078 0.875790 0.385754 +vn 0.288675 0.461684 -0.838710 +vn -0.263771 -0.459426 0.848109 +vn 0.313883 -0.872463 -0.374523 +vn -0.353130 0.935514 -0.007324 +vn -0.492599 -0.733757 0.467849 +vn 0.692343 -0.689322 -0.213141 +vn 0.728507 0.459487 -0.508042 +vn -0.737907 0.576495 -0.350902 +vn 0.773461 0.619068 -0.135929 +vn -0.680471 -0.702628 0.207923 +vn 0.627094 -0.670675 0.396069 +vn -0.557756 0.491714 -0.668661 +vn -0.681997 -0.668722 0.296060 +vn 0.621570 -0.416761 0.663228 +vn 0.778710 0.605335 -0.164739 +vn -0.528520 0.302225 -0.793268 +vn 0.713248 0.678518 -0.175573 +vn -0.714103 -0.669362 0.204749 +vn 0.486099 -0.316416 0.814570 +vn -0.875942 -0.239570 -0.418653 +vn 0.166326 0.666585 -0.726615 +vn -0.174078 -0.655080 0.735221 +vn 0.868313 0.250618 0.427992 +vn -0.632435 0.773614 -0.038881 +vn -0.574023 0.818049 -0.035279 +vn 0.091128 -0.019135 -0.995636 +vn -0.031556 -0.019135 0.999298 +vn -0.072085 0.033143 0.996826 +vn 0.648640 -0.760033 0.039888 +vn 0.591205 -0.805689 0.036348 +vn 0.050600 0.033143 -0.998138 +vn -0.559679 0.827967 -0.034394 +vn 0.085116 -0.014924 -0.996246 +vn -0.037599 -0.014924 0.999176 +vn 0.577837 -0.815363 0.035524 +vn -0.456832 0.889126 -0.026917 +vn -0.086245 0.077303 0.993255 +vn 0.480483 -0.876522 0.027802 +vn 0.037049 0.074709 -0.996490 +vn -0.198462 0.951933 0.233253 +vn 0.630451 0.297494 0.716941 +vn 0.621906 -0.747337 0.233772 +vn -0.519761 -0.471236 -0.712546 +vn -0.544084 0.821986 0.168096 +vn -0.834773 -0.549089 -0.040345 +vn 0.855251 0.518021 0.013733 +vn 0.519974 -0.832942 -0.189093 +vn -0.567309 0.730430 0.380261 +vn -0.812738 -0.542802 -0.211615 +vn 0.897946 0.422254 0.123905 +vn 0.471297 -0.776269 -0.418592 +vn -0.629749 0.636341 0.445479 +vn 0.812922 0.257912 0.522080 +vn 0.407849 -0.684591 -0.604114 +vn -0.824671 -0.220710 -0.520737 +vn -0.559008 0.584490 0.588061 +vn 0.762230 -0.034791 0.646352 +vn 0.567614 -0.568407 -0.595569 +vn -0.679312 -0.025758 -0.733390 +vn -0.652394 0.261452 0.711325 +vn 0.790918 0.008789 0.611835 +vn 0.674490 -0.240486 -0.697989 +vn -0.661153 -0.035707 -0.749352 +vn 0.026826 0.071108 0.997101 +vn -0.998871 0.001221 0.046999 +vn 0.998657 0.013367 -0.049837 +vn -0.024415 -0.056246 -0.998108 +vn 0.622150 0.550005 -0.557085 +vn 0.559038 0.660878 -0.500687 +vn 0.696371 0.048524 0.715995 +vn -0.710105 -0.026551 -0.703543 +vn -0.634999 0.048677 -0.770959 +vn -0.630177 -0.533311 0.564257 +vn -0.568560 -0.646046 0.509232 +vn 0.621143 -0.026551 0.783197 +vn 0.505997 0.733787 -0.453291 +vn -0.681204 -0.005982 -0.732047 +vn -0.516617 -0.720359 0.462752 +vn 0.652486 -0.006165 0.757744 +vn 0.564013 0.709372 -0.422620 +vn -0.596820 -0.087283 -0.797571 +vn -0.505020 -0.683432 0.527085 +vn 0.583270 0.100314 0.806024 +vn 0.524003 0.710501 -0.469649 +vn 0.496506 0.200568 0.844539 +vn -0.505051 -0.180212 -0.844020 +vn -0.536363 -0.696310 0.476882 +vn 0.577563 0.641621 -0.504685 +vn -0.549883 -0.193884 -0.812403 +vn -0.603046 -0.631123 0.487838 +vn 0.482253 0.149266 0.863186 +vn 0.698752 0.538560 -0.470779 +vn -0.485641 -0.245003 -0.839106 +vn -0.661489 -0.496658 0.561907 +vn 0.446028 0.240120 0.862178 +vn 0.725181 0.429182 -0.538408 +vn 0.397961 0.299203 0.867214 +vn -0.450148 -0.306101 -0.838832 +vn -0.752739 -0.424146 0.503433 +vn 0.859920 0.249794 -0.445082 +vn -0.468398 -0.366894 -0.803705 +vn -0.828639 -0.196112 0.524247 +vn 0.332133 0.351756 0.875149 +vn 0.871364 0.038423 -0.489059 +vn 0.389935 0.361248 0.847011 +vn -0.406690 -0.343181 -0.846644 +vn -0.917203 -0.056520 0.394330 +vn 0.334849 -0.140873 -0.931669 +vn 0.929075 0.200323 0.310923 +vn -0.930601 -0.186743 -0.314737 +vn -0.337962 0.154332 0.928404 +vn -0.501328 0.853511 0.141942 +vn -0.405957 0.906613 0.114933 +vn -0.183142 -0.006104 -0.983062 +vn 0.359416 -0.006104 0.933134 +vn 0.307108 0.079867 0.948302 +vn 0.612110 -0.771508 -0.173315 +vn 0.525742 -0.837489 -0.148869 +vn -0.235664 0.079867 -0.968535 +vn -0.424909 0.897183 0.120304 +vn -0.179052 -0.020936 -0.983612 +vn 0.363201 -0.020936 0.931455 +vn 0.545000 -0.824061 -0.154332 +vn -0.699271 0.686850 0.198004 +vn -0.155889 -0.005768 -0.987732 +vn 0.385113 -0.005768 0.922849 +vn 0.786401 -0.576128 -0.222663 +vn -0.828181 0.509018 0.234504 +vn 0.300699 0.064516 0.951506 +vn 0.888760 -0.383068 -0.251656 +vn -0.242805 0.064516 -0.967895 +vn -0.837001 0.493149 0.237007 +vn -0.232887 0.059603 -0.970672 +vn 0.310587 0.059603 0.948668 +vn 0.895962 -0.364483 -0.253700 +vn -0.931944 0.248604 0.263894 +vn -0.151952 0.052522 -0.986969 +vn 0.388073 0.052522 0.920103 +vn 0.956786 -0.105441 -0.270913 +vn -0.494766 -0.008148 0.868984 +vn -0.876919 -0.008148 -0.480544 +vn 0.877499 0.107974 0.467238 +vn 0.502243 0.107974 -0.857936 +vn -0.234107 0.714316 -0.659474 +vn -0.278024 0.556749 -0.782739 +vn 0.923124 0.124790 -0.363628 +vn -0.945769 0.124790 0.299875 +vn -0.896207 0.015015 0.443342 +vn 0.265023 -0.610279 0.746513 +vn 0.300729 -0.435347 0.848537 +vn 0.974914 0.013855 -0.222083 +vn -0.323069 0.259957 -0.909940 +vn 0.959624 0.061281 -0.274422 +vn -0.917905 0.058443 0.392407 +vn 0.331339 -0.122013 0.935575 +vn -0.394116 0.037843 -0.918241 +vn 0.956542 -0.043428 -0.288308 +vn -0.905057 0.189154 0.380840 +vn 0.306101 0.116306 0.944853 +vn -0.898953 0.104129 -0.425428 +vn 0.398633 -0.237403 -0.885830 +vn -0.382031 0.332408 0.862270 +vn 0.908963 -0.002686 0.416852 +vn -0.519761 0.547746 0.655568 +vn -0.550157 0.464553 0.693899 +vn -0.737541 0.047304 -0.673605 +vn 0.774865 0.086550 0.626148 +vn 0.824061 0.047273 0.564501 +vn 0.562639 -0.424085 -0.709616 +vn 0.585498 -0.334422 -0.738456 +vn -0.786340 0.086550 -0.611682 +vn 0.145848 0.262185 0.953917 +vn -0.962035 0.262185 0.075472 +vn 0.980041 -0.167943 -0.106296 +vn -0.119968 -0.167943 -0.978454 +vn -0.605579 0.312571 -0.731803 +vn -0.972808 0.221290 -0.067904 +vn 0.115329 0.221290 -0.968352 +vn -0.757378 0.069002 0.649281 +vn -0.099643 -0.123569 0.987304 +vn 0.627705 -0.174535 0.758599 +vn 0.988495 -0.123569 0.086856 +vn 0.779534 0.069002 -0.622517 +vn -0.009339 0.909543 0.415448 +vn -0.012604 0.850551 0.525712 +vn -0.993469 -0.005982 -0.113895 +vn 0.995788 0.091281 -0.006897 +vn 0.997681 -0.007355 -0.067537 +vn 0.012085 -0.843776 -0.536485 +vn 0.014008 -0.769127 -0.638905 +vn -0.994446 0.091281 -0.051790 +vn -0.018220 0.669851 0.742241 +vn 0.997101 0.013001 -0.074679 +vn 0.017701 -0.560015 -0.828272 +vn -0.992828 0.012513 -0.118778 +vn -0.021241 0.436659 0.899350 +vn 0.997436 0.043764 -0.056307 +vn 0.020600 -0.308054 -0.951140 +vn -0.993957 0.042817 -0.100803 +vn -0.022828 0.172552 0.984710 +vn 0.996643 0.062838 -0.052278 +vn 0.022034 -0.034669 -0.999146 +vn -0.993378 0.061495 -0.096896 +vn -0.022462 0.043153 0.998810 +vn 0.996918 0.069063 0.036836 +vn 0.022095 0.094852 -0.995239 +vn -0.997589 0.068545 -0.008484 +vn 0.689291 0.050935 0.722648 +vn -0.721152 0.050935 0.690848 +vn 0.722526 0.047426 -0.689688 +vn -0.690695 0.047426 -0.721549 +vn -0.214057 0.974975 -0.059633 +vn -0.302805 0.949278 -0.084353 +vn 0.317606 0.067598 -0.945799 +vn -0.217231 0.067598 0.973754 +vn -0.189428 -0.014710 0.981780 +vn 0.341594 -0.934996 0.095187 +vn 0.426191 -0.896786 0.118748 +vn 0.345561 -0.014710 -0.938261 +vn -0.400159 0.909635 -0.111484 +vn -0.207648 0.030732 0.977691 +vn 0.517716 -0.843287 0.144230 +vn 0.327830 0.030732 -0.944212 +vn -0.476791 0.641957 0.600421 +vn -0.097568 0.641957 -0.760491 +vn 0.180792 -0.594684 0.783349 +vn 0.559832 -0.594653 -0.576983 +vn -0.500687 0.531846 0.682943 +vn 0.215094 0.376507 0.901059 +vn -0.924039 0.376537 0.065920 +vn 0.823908 0.061251 0.563372 +vn 0.951476 -0.289773 -0.103336 +vn 0.539445 -0.409284 -0.735801 +vn -0.187658 -0.289773 -0.938505 +vn -0.785150 0.061251 -0.616260 +vn -0.111332 0.881344 0.459151 +vn -0.077212 0.945280 0.316904 +vn -0.946532 -0.041414 -0.319834 +vn 0.987915 -0.041414 0.149205 +vn 0.972930 0.087741 0.213660 +vn 0.132694 -0.826380 -0.547227 +vn 0.100009 -0.905789 -0.411695 +vn -0.962584 0.088473 -0.256050 +vn -0.055788 0.971831 0.228828 +vn -0.955779 -0.017182 -0.293497 +vn 0.984313 -0.017487 0.175512 +vn 0.079653 -0.941649 -0.326945 +vn -0.092593 0.918088 0.385357 +vn -0.953490 -0.014679 -0.301004 +vn 0.985412 -0.014252 0.169408 +vn 0.116550 -0.869716 -0.479568 +vn -0.145817 0.782983 0.604694 +vn -0.946074 -0.020325 -0.323252 +vn 0.988800 -0.020844 0.147771 +vn 0.165410 -0.711692 -0.682699 +vn -0.176031 0.664174 0.726524 +vn 0.978210 0.042146 0.203192 +vn 0.191351 -0.581225 -0.790918 +vn -0.962676 0.041292 -0.267403 +vn -0.180578 0.642232 0.744896 +vn -0.960112 0.034700 -0.277383 +vn 0.980529 0.034639 0.193213 +vn 0.195807 -0.556291 -0.807550 +vn 0.556047 0.436872 0.707053 +vn -0.818140 0.436872 0.373821 +vn 0.827509 -0.375347 -0.417463 +vn -0.544389 -0.375347 -0.750145 +vn 0.003662 0.992920 -0.118564 +vn 0.001495 0.998657 -0.051241 +vn -0.995911 -0.031037 -0.084811 +vn 0.999207 0.030457 -0.024873 +vn 0.999237 -0.031037 -0.022706 +vn -0.000336 -0.999908 0.011658 +vn 0.001648 -0.998413 -0.056032 +vn -0.995758 0.030457 -0.086612 +vn -0.003143 0.996490 0.083468 +vn 0.999359 -0.022187 -0.027314 +vn 0.006134 -0.981567 -0.190985 +vn -0.995849 -0.021485 -0.088382 +vn 0.131901 0.932707 0.335582 +vn 0.961486 0.008515 -0.274667 +vn 0.059023 -0.877041 -0.476760 +vn -0.984558 -0.149144 0.091617 +vn 0.695425 0.710074 0.110111 +vn -0.587237 0.449934 0.672811 +vn 0.557390 -0.407971 -0.723075 +vn -0.712729 -0.677541 -0.181494 +vn -0.399762 0.716392 0.571795 +vn -0.421125 0.678060 0.602344 +vn -0.787591 0.025666 -0.615619 +vn 0.827631 0.057619 0.558275 +vn 0.848628 0.025666 0.528336 +vn 0.441420 -0.637532 -0.631397 +vn 0.460341 -0.595386 -0.658437 +vn -0.808496 0.057619 -0.585620 +vn 0.266732 0.449507 0.852473 +vn -0.892239 0.449507 0.042146 +vn 0.917325 -0.389599 -0.081668 +vn -0.238258 -0.389599 -0.889615 +vn 0.146519 0.980163 -0.133335 +vn 0.579272 0.693564 0.428205 +vn -0.371868 0.693564 -0.616962 +vn 0.711386 -0.007782 0.702750 +vn 0.427503 -0.704611 0.566332 +vn -0.067934 -0.995758 0.061800 +vn -0.523637 -0.704611 -0.478835 +vn -0.632771 -0.007782 -0.774285 +vn -0.842738 0.520524 0.137242 +vn -0.931242 0.331248 0.151646 +vn -0.058107 0.011322 -0.998230 +vn 0.089572 0.087008 0.992157 +vn 0.261605 0.011322 0.965087 +vn 0.881863 -0.449080 -0.143590 +vn 0.954680 -0.253731 -0.155461 +vn -0.229835 0.087008 -0.969329 +vn -0.986755 -0.021088 0.160680 +vn 0.220496 0.045808 0.974303 +vn 0.981658 0.103732 -0.159856 +vn -0.100009 0.045808 -0.993927 +vn -0.986663 -0.025208 0.160680 +vn 0.094089 0.037477 0.994842 +vn 0.981170 0.108249 -0.159764 +vn -0.226417 0.037477 -0.973296 +vn -0.982604 0.094150 0.160009 +vn -0.146641 0.040559 -0.988342 +vn 0.174505 0.040559 0.983795 +vn 0.986908 -0.011872 -0.160710 +vn -0.974212 -0.160344 0.158635 +vn -0.067202 0.063326 -0.995697 +vn 0.252174 0.063326 0.965575 +vn 0.957213 0.243721 -0.155858 +vn -0.535661 -0.279305 0.796869 +vn -0.760826 -0.279336 -0.585711 +vn 0.741081 0.334941 0.581896 +vn 0.518143 0.334910 -0.786950 +vn -0.075381 0.995880 -0.050264 +vn 0.061251 0.997284 0.040803 +vn -0.594531 -0.069826 0.801019 +vn 0.514481 0.079012 -0.853816 +vn 0.511124 -0.069735 -0.856655 +vn 0.006867 -0.999939 0.004578 +vn -0.129765 -0.987762 -0.086428 +vn -0.590472 0.079012 0.803156 +vn 0.216803 0.965453 0.144475 +vn 0.519059 0.004364 -0.854701 +vn -0.282723 -0.940519 -0.188269 +vn -0.589343 0.003998 0.807855 +vn 0.556505 0.679037 -0.478683 +vn -0.227973 0.679037 0.697745 +vn 0.180883 -0.660726 -0.728477 +vn -0.602985 -0.660726 0.447005 +vn -0.170537 0.780572 0.601306 +vn 0.559282 0.552202 0.618244 +vn -0.800623 0.552202 0.232490 +vn 0.969787 0.027467 0.242317 +vn 0.812769 -0.513321 -0.275399 +vn 0.187750 -0.725639 -0.661946 +vn -0.547136 -0.513321 -0.661153 +vn -0.952605 0.027467 -0.302957 +vn 0.073214 0.997101 -0.019532 +vn 0.042299 0.999054 -0.009919 +vn 0.187750 0.023041 0.981933 +vn -0.327525 -0.003845 -0.944823 +vn -0.324809 0.021180 -0.945524 +vn -0.209937 -0.976104 0.056001 +vn -0.184545 -0.981597 0.048891 +vn 0.186651 -0.003845 0.982391 +vn 0.215705 0.974883 -0.055208 +vn -0.352489 -0.072451 -0.932981 +vn -0.351695 -0.931425 0.093417 +vn 0.161016 -0.070681 0.984405 +vn 0.419935 0.900601 -0.112033 +vn 0.200446 0.036287 0.979003 +vn -0.313883 0.036287 -0.948759 +vn -0.533952 -0.833399 0.142460 +vn 0.493301 0.859828 -0.131596 +vn -0.339152 0.005585 -0.940703 +vn -0.609638 -0.775780 0.162633 +vn 0.174505 0.005585 0.984619 +vn 0.742943 0.639271 -0.198218 +vn -0.379864 -0.003632 -0.925016 +vn -0.823145 -0.523606 0.219611 +vn 0.131382 -0.003632 0.991302 +vn 0.942595 0.219581 -0.251473 +vn 0.146031 0.055239 0.987732 +vn -0.365398 0.055239 -0.929197 +vn -0.963134 -0.079226 0.256966 +vn 0.506424 -0.015137 -0.862117 +vn 0.868587 -0.015137 0.495254 +vn -0.867794 0.115696 -0.483261 +vn -0.511704 0.115696 0.851314 +vn 0.004761 0.999969 0.003998 +vn 0.157994 0.978393 0.133213 +vn -0.711234 -0.069796 0.699454 +vn 0.588855 0.112217 -0.800378 +vn 0.565844 -0.070467 -0.821467 +vn -0.111698 -0.989288 -0.093631 +vn -0.263436 -0.939146 -0.220374 +vn -0.685232 0.112217 0.719596 +vn 0.455428 0.803613 0.383068 +vn 0.547014 -0.026643 -0.836665 +vn -0.539232 -0.711295 -0.450819 +vn -0.727287 -0.027924 0.685720 +vn 0.624683 0.511887 0.589648 +vn 0.594501 -0.032350 -0.803400 +vn -0.716361 -0.379986 -0.585131 +vn -0.744682 0.090091 0.661275 +vn 0.987518 0.147008 -0.056185 +vn 0.005280 0.340220 0.940306 +vn -0.034608 -0.245888 -0.968657 +vn -0.998291 -0.054231 0.020783 +vn 0.736167 0.661855 0.141270 +vn 0.825098 0.542283 0.158330 +vn -0.168676 0.104404 0.980102 +vn 0.206122 0.104404 -0.972930 +vn 0.093661 0.029359 -0.995148 +vn -0.820490 -0.549516 -0.157445 +vn -0.892392 -0.417463 -0.171270 +vn -0.281381 0.029359 0.959136 +vn 0.770470 0.283700 -0.570818 +vn 0.504410 0.283700 0.815516 +vn -0.546190 -0.191412 -0.815455 +vn -0.809290 -0.191412 0.555315 +vn 0.088778 0.797876 0.596210 +vn 0.761345 0.564898 0.318094 +vn -0.635609 0.564898 0.526139 +vn 0.978607 0.047090 -0.200171 +vn 0.624378 -0.498184 -0.601581 +vn -0.104648 -0.703665 -0.702750 +vn -0.772576 -0.498184 -0.393536 +vn -0.994476 0.047090 0.093631 +vn -0.068392 0.923185 -0.378155 +vn -0.078951 0.894620 -0.439711 +vn 0.988769 0.061007 -0.136204 +vn -0.973846 0.061007 0.218848 +vn -0.968627 0.004517 0.248360 +vn 0.088992 -0.865993 0.492019 +vn 0.099734 -0.828852 0.550462 +vn 0.994354 0.005493 -0.105808 +vn -0.109806 0.784143 -0.610767 +vn -0.963897 -0.000946 0.266152 +vn 0.127537 -0.696890 0.705710 +vn 0.995849 -0.002258 -0.090915 +vn -0.138554 0.626240 -0.767205 +vn 0.993469 0.032197 -0.109317 +vn -0.969085 0.029725 0.244911 +vn 0.151555 -0.520005 0.840571 +vn -0.163427 0.383587 -0.908902 +vn -0.958983 0.033784 0.281381 +vn 0.171697 -0.260598 0.950041 +vn 0.996704 0.032319 -0.074007 +vn -0.176427 0.131260 -0.975494 +vn 0.986877 0.062838 -0.148595 +vn -0.976348 0.061800 0.207068 +vn 0.177526 -0.003510 0.984100 +vn -0.821314 0.052187 -0.568041 +vn 0.570238 0.052187 -0.819788 +vn -0.567095 0.039277 0.822687 +vn 0.819391 0.039277 0.571825 +vn -0.019837 0.895688 0.444197 +vn -0.029054 0.762596 0.646199 +vn -0.985046 -0.034883 -0.168676 +vn 0.988464 0.142216 0.051973 +vn 0.996185 -0.035524 -0.079501 +vn 0.024659 -0.833003 -0.552660 +vn 0.032746 -0.673940 -0.738029 +vn -0.989166 0.142216 -0.036317 +vn -0.041810 0.376415 0.925474 +vn 0.996857 0.030122 -0.073000 +vn 0.042665 -0.255104 -0.965941 +vn -0.986511 0.028321 -0.161046 +vn 0.670125 0.105991 0.734611 +vn -0.732963 0.105991 0.671926 +vn 0.723289 -0.016785 -0.690329 +vn -0.658834 -0.016785 -0.752068 +vn 0.485214 0.751152 -0.447554 +vn -0.135441 0.531693 -0.836024 +vn 0.822382 0.531693 0.202399 +vn -0.710196 0.045747 -0.702475 +vn -0.869961 -0.466903 -0.158483 +vn -0.552446 -0.659597 0.509568 +vn 0.087832 -0.466903 0.879910 +vn 0.642933 0.045747 0.764519 +vn -0.051881 0.859737 0.508072 +vn -0.049013 0.875210 0.481216 +vn -0.988556 0.014008 -0.150029 +vn 0.998474 0.014008 0.052889 +vn 0.996979 0.037721 0.067721 +vn 0.060091 -0.806269 -0.588427 +vn 0.057527 -0.824091 -0.563494 +vn -0.990112 0.037507 -0.135075 +vn -0.052828 0.853725 0.517960 +vn -0.986938 -0.001099 -0.160985 +vn 0.999084 -0.001343 0.042543 +vn 0.060915 -0.799188 -0.597949 +vn -0.063967 0.778222 0.624683 +vn 0.998657 0.014283 0.049440 +vn 0.070833 -0.714011 -0.696524 +vn -0.988067 0.013947 -0.153233 +vn -0.069857 0.724479 0.685720 +vn 0.997864 0.027009 0.058992 +vn 0.076724 -0.653951 -0.752586 +vn -0.989257 0.026307 -0.143651 +vn -0.081698 0.588824 0.804071 +vn -0.982482 0.002747 -0.186224 +vn 0.999847 0.002380 0.017029 +vn 0.087405 -0.507523 -0.857173 +vn -0.093570 0.390088 0.915983 +vn 0.997864 0.034577 0.055208 +vn 0.096713 -0.299692 -0.949095 +vn -0.988433 0.034028 -0.147649 +vn 0.635334 0.228278 0.737693 +vn -0.771355 0.228278 0.594012 +vn 0.771111 -0.163121 -0.615406 +vn -0.630787 -0.163121 -0.758599 +vn 0.014985 0.998627 -0.049867 +vn -0.035127 0.992523 0.116703 +vn -0.935667 -0.070467 -0.345744 +vn 0.966826 0.087130 0.240059 +vn 0.970946 -0.070376 0.228675 +vn 0.012452 -0.999054 -0.041444 +vn 0.062075 -0.976318 -0.207129 +vn -0.938749 0.087130 -0.333323 +vn -0.110050 0.924619 0.364635 +vn 0.973266 -0.015198 0.229041 +vn 0.134770 -0.883602 -0.448347 +vn -0.938383 -0.015442 -0.345225 +vn -0.058473 0.799554 0.597736 +vn 0.995544 0.083468 0.043458 +vn 0.241523 -0.718772 -0.651906 +vn -0.964812 -0.143376 -0.220313 +vn 0.583728 0.646901 0.490616 +vn -0.794946 0.297281 0.528794 +vn 0.782189 -0.248329 -0.571368 +vn -0.582751 -0.602039 -0.545793 +vn -0.378521 0.752068 -0.539537 +vn -0.426984 0.668752 -0.608600 +vn 0.812616 0.076144 -0.577746 +vn -0.819819 0.076144 0.567522 +vn -0.774560 0.003143 0.632466 +vn 0.418256 -0.685232 0.596179 +vn 0.462050 -0.593890 0.658589 +vn 0.858303 0.003143 -0.513108 +vn -0.911771 0.404584 -0.070101 +vn 0.244331 0.404584 -0.881222 +vn -0.218055 -0.348918 0.911405 +vn 0.931211 -0.348888 0.105075 +vn 0.011750 0.998810 0.047151 +vn 0.693960 0.706687 -0.137730 +vn -0.677328 0.706687 0.204474 +vn 0.957396 0.004669 -0.288614 +vn 0.660787 -0.700034 -0.270699 +vn -0.035127 -0.989410 -0.140751 +vn -0.710501 -0.700034 0.071505 +vn -0.980773 0.004669 0.195044 +vn 0.144047 0.960204 0.239143 +vn 0.146153 0.959136 0.242164 +vn -0.873623 0.009125 0.486496 +vn 0.839259 0.012970 -0.543535 +vn 0.838374 0.009552 -0.544969 +vn -0.178350 -0.938322 -0.296091 +vn -0.180700 -0.936705 -0.299814 +vn -0.872860 0.012970 0.487747 +vn 0.219337 0.905362 0.363506 +vn -0.886349 -0.043550 0.460952 +vn 0.822382 -0.043397 -0.567217 +vn -0.251686 -0.873165 -0.417341 +vn 0.329264 0.769646 0.546983 +vn 0.825770 -0.011231 -0.563860 +vn -0.356456 -0.723350 -0.591296 +vn -0.884457 -0.011505 0.466445 +vn 0.414869 0.594165 0.689077 +vn 0.817469 -0.006348 -0.575884 +vn -0.435469 -0.536576 -0.722770 +vn -0.891171 -0.006531 0.453536 +vn 0.457717 0.461592 0.759850 +vn 0.845241 0.028687 -0.533586 +vn -0.473251 -0.398724 -0.785485 +vn -0.866909 0.028443 0.497604 +vn 0.931791 0.317057 0.176641 +vn -0.279489 0.317057 0.906278 +vn 0.268349 -0.272195 -0.924039 +vn -0.942289 -0.272195 -0.194800 +vn 0.100955 0.924680 0.367077 +vn 0.116550 0.898312 0.423566 +vn -0.975036 -0.009491 0.221778 +vn 0.958068 0.042787 -0.283212 +vn 0.951292 -0.009369 -0.308115 +vn -0.117832 -0.895840 -0.428419 +vn -0.132878 -0.865352 -0.483169 +vn -0.968169 0.042787 0.246559 +vn 0.161870 0.792413 0.588061 +vn -0.979339 -0.024812 0.200568 +vn 0.944243 -0.024842 -0.328227 +vn -0.176061 -0.747795 -0.640126 +vn 0.814264 0.496323 0.301035 +vn -0.545762 0.496292 0.675100 +vn 0.533036 -0.462203 -0.708670 +vn -0.820460 -0.462203 -0.336406 +vn -0.827998 0.283212 0.483902 +vn -0.228980 0.200323 0.952574 +vn -0.942351 0.200323 -0.267983 +vn 0.511795 0.033876 0.858425 +vn 0.953001 -0.152379 0.261757 +vn 0.843074 -0.215461 -0.492721 +vn 0.239631 -0.152379 -0.958800 +vn -0.496750 0.033876 -0.867214 +vn -0.131535 0.988891 0.069063 +vn -0.160680 0.983367 0.084567 +vn 0.401929 0.007538 0.915616 +vn -0.522691 -0.022401 -0.852199 +vn -0.525254 0.007416 -0.850887 +vn 0.011261 -0.999908 -0.005921 +vn 0.040437 -0.998932 -0.021210 +vn 0.404797 -0.022401 0.914121 +vn -0.128452 0.989349 0.068331 +vn -0.521378 -0.038881 -0.852412 +vn 0.007355 -0.999939 -0.003571 +vn 0.404828 -0.038484 0.913541 +vn 0.041505 0.998901 -0.020936 +vn -0.529557 -0.044862 -0.847072 +vn -0.161138 -0.983276 0.084628 +vn 0.398877 -0.044527 0.915891 +vn 0.151616 0.985229 -0.079196 +vn 0.404187 0.015473 0.914518 +vn -0.522233 0.014252 -0.852657 +vn -0.268990 -0.952788 0.140660 +vn 0.300882 0.940580 -0.157231 +vn -0.547105 -0.044465 -0.835841 +vn -0.412244 -0.884976 0.216407 +vn 0.378643 -0.044313 0.924467 +vn 0.547655 0.785577 -0.287912 +vn 0.380596 -0.001617 0.924711 +vn -0.544755 -0.001709 -0.838557 +vn -0.636311 -0.695273 0.334147 +vn 0.126988 0.486679 -0.864284 +vn 0.783593 0.486679 0.386120 +vn -0.839167 -0.416883 -0.349254 +vn -0.188879 -0.416883 0.889096 +vn 0.310526 0.630696 0.711173 +vn 0.309305 0.636433 0.706565 +vn 0.934294 -0.046571 -0.353404 +vn -0.894253 -0.046571 0.445082 +vn -0.896664 -0.052797 0.439528 +vn -0.273324 -0.730399 -0.625935 +vn -0.270608 -0.737053 -0.619251 +vn 0.932340 -0.052950 -0.357646 +vn 0.234626 0.809107 0.538743 +vn -0.908475 -0.130345 0.397076 +vn -0.187414 -0.882199 -0.431959 +vn 0.908322 -0.131901 -0.396863 +vn 0.439772 0.856227 0.271004 +vn -0.984527 0.132939 -0.113926 +vn 0.052950 -0.998566 -0.007202 +vn 0.934507 -0.248848 0.254402 +vn -0.354869 0.771569 -0.527909 +vn 0.607776 0.434675 0.664541 +vn -0.663289 -0.465651 -0.585772 +vn 0.312296 -0.738884 0.597064 +vn -0.363445 0.928922 -0.070589 +vn -0.211554 0.976501 -0.041078 +vn -0.245064 -0.084353 0.965819 +vn 0.100558 0.059389 -0.993133 +vn 0.134251 -0.084353 -0.987335 +vn 0.237831 -0.970183 0.046175 +vn 0.079928 -0.996673 0.015503 +vn -0.278481 0.059389 0.958586 +vn 0.104007 0.708213 -0.698264 +vn -0.164892 0.708213 0.686453 +vn 0.069094 -0.713920 -0.696768 +vn -0.196722 -0.713920 0.671987 +vn -0.181097 0.836024 0.517869 +vn -0.794885 0.591845 0.133488 +vn 0.538469 0.591845 0.599750 +vn -0.961364 -0.033418 -0.273202 +vn -0.566240 -0.639180 -0.520341 +vn 0.141850 -0.902890 -0.405713 +vn 0.767113 -0.639180 -0.054079 +vn 0.922117 -0.033418 0.385388 +vn -0.073031 0.593616 -0.801416 +vn -0.081515 0.440535 -0.894009 +vn 0.985473 0.105625 -0.132908 +vn -0.993255 0.105625 0.047426 +vn -0.980987 0.029633 0.191687 +vn 0.079379 -0.484573 0.871120 +vn 0.085238 -0.321421 0.943083 +vn 0.999542 0.028169 0.009796 +vn -0.088565 0.200018 -0.975768 +vn 0.996643 0.062227 -0.052614 +vn -0.989837 0.058992 0.129368 +vn 0.089602 -0.071596 0.993378 +vn -0.090243 0.004913 -0.995880 +vn -0.986816 0.070833 0.145421 +vn 0.090487 0.128666 0.987518 +vn 0.996918 0.070040 -0.035279 +vn -0.090670 0.091189 -0.991668 +vn 0.979247 0.069277 -0.190374 +vn -0.997497 0.069613 -0.011109 +vn 0.091403 0.041139 0.994934 +vn -0.090121 0.128971 -0.987518 +vn -0.980865 0.059969 0.185186 +vn 0.090823 0.000977 0.995849 +vn 0.998169 0.059999 0.004944 +vn -0.764977 -0.058321 -0.641377 +vn 0.636402 -0.058321 -0.769127 +vn -0.627216 0.151006 0.764061 +vn 0.754997 0.151006 0.638050 +vn -0.340892 0.905759 0.251656 +vn -0.490738 0.792383 0.362255 +vn -0.496597 -0.032167 -0.867367 +vn 0.590808 0.131596 0.795984 +vn 0.682607 -0.032167 0.730033 +vn 0.431532 -0.843959 -0.318552 +vn 0.569018 -0.706931 -0.420026 +vn -0.586627 0.131596 -0.799066 +vn -0.681570 0.531266 0.503128 +vn 0.656331 0.031648 0.753777 +vn 0.731651 -0.415845 -0.540086 +vn -0.527024 0.031648 -0.849239 +vn -0.097507 0.296213 0.950102 +vn -0.936674 0.296213 -0.186651 +vn 0.964324 -0.211493 0.159001 +vn 0.132054 -0.211493 -0.968383 +vn 0.320719 0.086276 0.943205 +vn 0.895749 0.061068 0.440291 +vn -0.441694 0.061068 0.895077 +vn 0.944243 0.065889 -0.322489 +vn 0.441054 0.032197 -0.896878 +vn -0.321574 0.045473 -0.945769 +vn -0.896359 0.032197 -0.442091 +vn -0.945128 0.065889 0.319926 +vn -0.035249 0.754021 0.655873 +vn -0.029878 0.818720 0.573382 +vn -0.991546 0.002472 -0.129704 +vn 0.999725 0.002472 -0.022675 +vn 0.996551 0.073885 0.037507 +vn 0.039552 -0.675649 -0.736137 +vn 0.035218 -0.746086 -0.664876 +vn -0.994964 0.072024 -0.069460 +vn -0.034669 0.734397 0.677786 +vn -0.984100 -0.035340 -0.173956 +vn 0.997345 -0.035127 -0.063692 +vn 0.039308 -0.651875 -0.757256 +vn -0.047365 0.437544 0.897916 +vn 0.999298 0.033052 -0.016511 +vn 0.049379 -0.335582 -0.940703 +vn -0.991821 0.028901 -0.124058 +vn -0.052004 0.116581 0.991791 +vn -0.986389 0.052126 -0.155736 +vn 0.997559 0.050569 -0.047884 +vn 0.053621 -0.002594 -0.998535 +vn -0.053407 0.074374 0.995788 +vn 0.988739 0.058077 0.137761 +vn 0.053438 0.037080 -0.997864 +vn -0.997833 0.057985 0.030702 +vn -0.053468 0.068392 0.996216 +vn -0.987610 0.055605 -0.146580 +vn 0.997650 0.055574 -0.039766 +vn 0.053591 0.043672 -0.997589 +vn 0.664174 -0.102878 0.740440 +vn -0.739738 -0.102878 0.664968 +vn 0.730979 0.181951 -0.657643 +vn -0.656270 0.181951 -0.732231 +vn 0.041780 0.992126 0.117801 +vn 0.068484 0.978698 0.193396 +vn -0.961821 -0.021485 0.272774 +vn 0.924039 0.050722 -0.378826 +vn 0.918821 -0.021638 -0.393994 +vn -0.078799 -0.971831 -0.222053 +vn -0.105106 -0.949370 -0.295969 +vn -0.956175 0.050722 0.288278 +vn 0.123630 0.929197 0.348247 +vn 0.917081 -0.011658 -0.398450 +vn -0.158238 -0.881252 -0.445357 +vn -0.962889 -0.012452 0.269570 +vn 0.107944 0.766533 0.633045 +vn -0.993744 0.064760 0.090884 +vn 0.936521 -0.144353 -0.319437 +vn -0.273537 -0.673849 -0.686331 +vn 0.826350 0.246040 0.506516 +vn -0.544115 0.571429 0.614307 +vn 0.535691 -0.511551 -0.671804 +vn -0.813013 -0.185827 -0.551744 +vn -0.230079 0.920377 0.316111 +vn -0.345408 0.809564 0.474593 +vn -0.738548 -0.044435 -0.672689 +vn 0.801447 0.128574 0.584063 +vn 0.867183 -0.044404 0.495956 +vn 0.288095 -0.871944 -0.395856 +vn 0.396344 -0.739097 -0.544603 +vn -0.802179 0.128574 -0.583056 +vn 0.247597 0.461501 0.851863 +vn -0.886715 0.461501 0.026276 +vn 0.911466 -0.404218 -0.076113 +vn -0.207770 -0.404218 -0.890713 +vn -0.110050 0.990783 0.078799 +vn 0.333476 0.701132 0.630177 +vn -0.489242 0.701132 -0.518632 +vn 0.626362 0.010773 0.779443 +vn 0.552995 -0.685873 0.472976 +vn 0.200110 -0.969207 -0.143315 +vn -0.269723 -0.685873 -0.675832 +vn -0.536271 0.010773 -0.843959 +vn 0.122349 0.925443 0.358562 +vn 0.132511 0.912381 0.387280 +vn -0.959258 0.003601 0.282479 +vn 0.936186 0.031465 -0.350047 +vn 0.931761 0.004181 -0.363018 +vn -0.145482 -0.892727 -0.426435 +vn -0.155370 -0.876736 -0.455123 +vn -0.954894 0.031465 0.295175 +vn 0.186377 0.817713 0.544603 +vn -0.967589 -0.032411 0.250343 +vn 0.919340 -0.032411 -0.392102 +vn -0.206519 -0.769463 -0.604327 +vn 0.241462 0.665029 0.706687 +vn 0.929411 0.011505 -0.368847 +vn -0.257698 -0.604144 -0.754021 +vn -0.960997 0.010254 0.276254 +vn 0.292062 0.430036 0.854244 +vn -0.975127 -0.001129 0.221564 +vn 0.907559 -0.001495 -0.419874 +vn -0.301828 -0.357067 -0.883938 +vn 0.321696 0.087405 0.942778 +vn 0.923399 0.036470 -0.382061 +vn -0.323130 -0.009491 -0.946287 +vn -0.964415 0.035890 0.261818 +vn 0.896176 -0.037141 0.442122 +vn -0.439009 -0.037141 0.897702 +vn 0.435774 0.092807 -0.895230 +vn -0.892117 0.092807 -0.442122 +vn 0.197241 0.973724 -0.113620 +vn 0.316904 0.930692 -0.182562 +vn 0.481002 0.078921 0.873135 +vn -0.514084 0.078921 -0.854091 +vn -0.552110 -0.044679 -0.832545 +vn -0.262398 -0.953032 0.151158 +vn -0.379192 -0.899136 0.218451 +vn 0.443281 -0.044679 0.895230 +vn 0.479690 0.832759 -0.276345 +vn 0.456679 -0.000122 0.889615 +vn -0.540513 -0.000122 -0.841304 +vn -0.534562 -0.786981 0.307962 +vn 0.018311 0.562609 -0.826472 +vn 0.724174 0.562639 0.398724 +vn -0.761498 -0.528489 -0.375164 +vn -0.057375 -0.528489 0.846980 +vn -0.123600 0.739525 -0.661641 +vn -0.782250 0.523118 -0.338206 +vn 0.607349 0.523118 -0.597858 +vn -0.977050 0.027650 0.211127 +vn -0.600055 -0.483963 0.636921 +vn 0.133915 -0.684194 0.716880 +vn 0.789544 -0.483963 0.377300 +vn 0.987365 0.027650 -0.155889 +vn 0.011963 0.998505 -0.053285 +vn -0.011383 0.998474 0.053713 +vn 0.962584 0.049654 0.266305 +vn -0.984619 -0.048280 -0.167791 +vn -0.983917 0.048616 -0.171850 +vn -0.032350 -0.989044 0.143986 +vn -0.009552 -0.999115 0.040742 +vn 0.961760 -0.048280 0.269478 +vn 0.015625 0.997894 -0.062899 +vn -0.982086 -0.100284 -0.159429 +vn -0.035798 -0.987335 0.154363 +vn 0.956603 -0.098148 0.274300 +vn 0.076968 0.938108 -0.337626 +vn 0.963012 0.000000 0.269417 +vn -0.985534 -0.002930 -0.169378 +vn -0.095767 -0.902036 0.420881 +vn 0.133274 0.798364 -0.587176 +vn -0.992279 -0.055116 -0.110965 +vn -0.148686 -0.737419 0.658834 +vn 0.945158 -0.054750 0.321940 +vn 0.187323 0.520066 -0.833308 +vn 0.957762 0.014832 0.287118 +vn -0.988586 0.013550 -0.149968 +vn -0.197516 -0.439589 0.876186 +vn 0.202704 0.380474 -0.902280 +vn 0.967925 0.039247 0.248054 +vn -0.981048 0.038881 -0.189795 +vn -0.209754 -0.292306 0.933012 +vn -0.544603 0.246803 -0.801538 +vn 0.835139 0.246803 -0.491531 +vn -0.838710 -0.183813 0.512558 +vn 0.538865 -0.183813 0.822077 +vn 0.242286 0.912748 -0.328867 +vn 0.252663 0.904782 -0.342784 +vn 0.781823 0.029725 0.622761 +vn -0.826472 0.029725 -0.562151 +vn -0.831233 0.014130 -0.555681 +vn -0.292032 -0.870357 0.396405 +vn -0.301950 -0.860683 0.409894 +vn 0.776971 0.014283 0.629353 +vn 0.308847 0.853511 -0.419599 +vn -0.840175 -0.006592 -0.542253 +vn -0.355144 -0.800531 0.482650 +vn 0.766778 -0.007202 0.641835 +vn 0.521439 0.736229 -0.431318 +vn -0.697165 -0.212531 -0.684652 +vn -0.408399 -0.614551 0.674886 +vn 0.578509 0.194403 0.792138 +vn 0.065767 0.122135 -0.990326 +vn 0.663015 0.726676 0.179785 +vn -0.712729 -0.683370 -0.157933 +vn -0.105716 -0.072695 0.991729 +vn -0.883999 0.451796 0.119907 +vn -0.898221 0.422285 0.121830 +vn -0.102756 0.037751 -0.993957 +vn 0.138676 0.049501 0.989074 +vn 0.165746 0.037751 0.985412 +vn 0.922117 -0.366070 -0.125095 +vn 0.933531 -0.335307 -0.126621 +vn -0.129856 0.049501 -0.990265 +vn -0.549852 0.276498 0.788141 +vn -0.739982 0.276498 -0.613147 +vn 0.763756 -0.214515 0.608783 +vn 0.573931 -0.214515 -0.790277 +vn 0.224219 0.966613 -0.123905 +vn -0.183172 0.683859 -0.706198 +vn 0.500473 0.683859 0.530869 +vn -0.522355 0.014161 -0.852596 +vn -0.555956 -0.663808 -0.500198 +vn -0.302683 -0.938261 0.167272 +vn 0.127659 -0.663808 0.736869 +vn 0.443892 0.014161 0.895932 +vn -0.035615 0.999329 -0.003906 +vn -0.154363 0.987854 -0.016968 +vn 0.145726 0.062258 -0.987335 +vn -0.072176 0.062258 0.995422 +vn -0.057863 -0.045656 0.997253 +vn 0.117740 -0.992950 0.012940 +vn 0.234901 -0.971648 0.025819 +vn 0.160100 -0.045656 -0.986023 +vn -0.347636 0.936827 -0.038209 +vn -0.057619 -0.015656 0.998199 +vn 0.423566 -0.904630 0.046541 +vn 0.160527 -0.015656 -0.986877 +vn -0.435041 0.899106 -0.047792 +vn -0.068941 0.012970 0.997528 +vn 0.508011 -0.859493 0.055818 +vn 0.149327 0.012970 -0.988678 +vn -0.448347 0.892483 -0.049257 +vn -0.073519 0.021455 0.997040 +vn 0.520798 -0.851741 0.057222 +vn 0.144749 0.021455 -0.989227 +vn -0.496658 0.866207 -0.054567 +vn 0.158422 -0.000122 -0.987365 +vn -0.059786 -0.000122 0.998199 +vn 0.566820 -0.821436 0.062288 +vn -0.464675 0.590014 0.660237 +vn -0.310190 0.590045 -0.745384 +vn 0.358959 -0.556902 0.748985 +vn 0.513047 -0.556902 -0.653127 +vn 0.503769 0.858760 0.093112 +vn 0.461989 0.882748 0.085360 +vn 0.229011 0.001495 -0.973418 +vn -0.134037 0.001495 0.990966 +vn -0.153600 -0.038697 0.987365 +vn -0.431654 -0.898465 -0.079775 +vn -0.386944 -0.919309 -0.071505 +vn 0.209418 -0.038697 -0.977050 +vn 0.192083 0.980712 0.035493 +vn -0.156194 -0.113620 0.981140 +vn -0.111789 -0.993500 -0.020661 +vn 0.204779 -0.113620 -0.972167 +vn -0.163976 0.713431 0.681234 +vn 0.090335 0.713431 -0.694845 +vn -0.031404 -0.714988 0.698386 +vn 0.220283 -0.714988 -0.663472 +vn 0.026612 0.999420 0.020814 +vn -0.416547 0.706992 0.571490 +vn 0.454207 0.706992 -0.542039 +vn -0.582568 0.000305 0.812738 +vn -0.407697 -0.706534 0.578417 +vn 0.039155 -0.998749 0.030610 +vn 0.463088 -0.706534 -0.535081 +vn 0.648366 0.000305 -0.761315 +vn 0.035249 0.890469 0.453597 +vn 0.021393 0.960143 0.278603 +vn -0.997864 -0.064852 0.004456 +vn 0.986572 -0.064852 -0.149785 +vn 0.992492 0.091372 -0.081057 +vn -0.039583 -0.859584 -0.509445 +vn -0.026093 -0.940489 -0.338755 +vn -0.993072 0.091922 0.073061 +vn 0.013977 0.982696 0.184637 +vn -0.998657 -0.036378 0.036714 +vn 0.992309 -0.036866 -0.118046 +vn -0.019013 -0.969054 -0.246071 +vn 0.022248 0.958281 0.284921 +vn 0.993988 0.008850 -0.108860 +vn -0.027070 -0.937712 -0.346294 +vn -0.998871 0.008484 0.046327 +vn 0.028962 0.928098 0.371197 +vn -0.999207 -0.023560 0.031343 +vn 0.992096 -0.023530 -0.123142 +vn -0.033540 -0.901822 -0.430738 +vn 0.035585 0.888394 0.457686 +vn 0.994171 0.014039 -0.106845 +vn -0.040040 -0.856685 -0.514206 +vn -0.998718 0.013886 0.048158 +vn 0.038514 0.867824 0.495346 +vn -0.999146 0.002228 0.040620 +vn 0.993439 0.002228 -0.114231 +vn -0.042787 -0.833613 -0.550645 +vn 0.734031 0.599322 0.319285 +vn -0.675863 0.599322 0.428907 +vn 0.671987 -0.574358 -0.467452 +vn -0.736137 -0.574358 -0.357952 +vn -0.126530 0.991821 -0.015717 +vn -0.286935 0.957274 -0.035676 +vn 0.177404 -0.060884 -0.982238 +vn -0.103793 0.084475 0.990997 +vn -0.068575 -0.060884 0.995758 +vn 0.189489 -0.981597 0.023560 +vn 0.347545 -0.936644 0.043214 +vn 0.142064 0.084475 -0.986236 +vn -0.551561 0.831294 -0.068422 +vn -0.063448 -0.026917 0.997620 +vn 0.604541 -0.792993 0.075167 +vn 0.182714 -0.027192 -0.982757 +vn -0.735252 0.642598 -0.215461 +vn 0.331980 0.122745 -0.935240 +vn -0.173223 -0.165868 0.970794 +vn 0.821345 -0.567400 0.058260 +vn -0.854915 0.129765 0.502243 +vn -0.342936 0.563128 -0.751823 +vn 0.370006 -0.526292 0.765557 +vn 0.870235 -0.092288 -0.483840 +vn -0.397992 0.288278 -0.870876 +vn -0.414197 0.083987 -0.906278 +vn 0.867000 0.057497 -0.494949 +vn -0.941649 0.057497 0.331614 +vn -0.864986 0.027772 0.500992 +vn 0.404828 -0.226722 0.885830 +vn 0.415571 -0.019501 0.909330 +vn 0.944884 0.027772 -0.326151 +vn -0.931608 -0.093265 -0.351238 +vn 0.344096 -0.093265 -0.934263 +vn -0.340739 0.139012 0.929807 +vn 0.926054 0.139012 0.350841 +vn -0.289682 0.952025 0.098483 +vn 0.022645 0.673360 0.738945 +vn -0.432447 0.673360 -0.599628 +vn 0.350749 0.010956 0.936369 +vn 0.473525 -0.657826 0.585650 +vn 0.347789 -0.930082 -0.118229 +vn 0.018433 -0.657826 -0.752922 +vn -0.292673 0.010956 -0.956145 +vn 0.139073 0.874660 -0.464309 +vn 0.137577 0.877621 -0.459120 +vn 0.945921 0.026521 0.323222 +vn -0.968657 0.021760 -0.247353 +vn -0.967834 0.026399 -0.250130 +vn -0.161687 -0.826044 0.539842 +vn -0.160253 -0.829432 0.535081 +vn 0.945128 0.021760 0.325877 +vn 0.147740 0.857326 -0.493057 +vn -0.971221 0.007691 -0.237953 +vn -0.169866 -0.805994 0.567003 +vn 0.942228 0.007599 0.334849 +vn 0.160741 0.828669 -0.536119 +vn 0.945799 0.026429 0.323588 +vn -0.967895 0.025941 -0.249886 +vn -0.182104 -0.773064 0.607593 +vn 0.193976 0.737846 -0.646443 +vn -0.977599 -0.012787 -0.209998 +vn -0.212592 -0.672018 0.709311 +vn 0.932310 -0.012909 0.361339 +vn 0.233222 0.582415 -0.778680 +vn 0.942778 0.024079 0.332530 +vn -0.970336 0.023621 -0.240577 +vn -0.247810 -0.505112 0.826685 +vn -0.505387 0.375561 -0.776849 +vn 0.849239 0.375561 -0.371044 +vn -0.857082 -0.319498 0.404096 +vn 0.493759 -0.319498 0.808740 +vn 0.821284 0.570421 0.007141 +vn 0.869259 0.494247 0.007569 +vn 0.004425 0.062899 0.997986 +vn 0.021821 0.062899 -0.997772 +vn -0.049165 0.022553 -0.998505 +vn -0.870357 -0.492294 -0.007569 +vn -0.911222 -0.411817 -0.007935 +vn -0.066591 0.022553 0.997497 +vn 0.948576 0.316416 0.008240 +vn -0.066073 0.031983 0.997284 +vn -0.048677 0.031983 -0.998291 +vn -0.973754 -0.227302 -0.008484 +vn 0.697378 0.151616 -0.700461 +vn 0.685049 0.151616 0.712516 +vn -0.699454 -0.087771 -0.709250 +vn -0.711692 -0.087771 0.696951 +vn 0.703635 0.514847 -0.489669 +vn 0.094119 0.364238 -0.926511 +vn 0.901486 0.364238 0.233619 +vn -0.588610 0.040773 -0.807367 +vn -0.927030 -0.306558 -0.215857 +vn -0.739738 -0.433302 0.514786 +vn -0.119663 -0.306558 0.944273 +vn 0.552538 0.040773 0.832453 +vn -0.476852 0.878018 0.041047 +vn -0.315012 0.948668 0.027100 +vn -0.007416 -0.054720 -0.998444 +vn 0.163305 -0.054720 0.985046 +vn 0.093783 0.089389 0.991546 +vn 0.542985 -0.838404 -0.046724 +vn 0.387402 -0.921293 -0.033326 +vn -0.077029 0.089389 -0.992981 +vn -0.221686 0.974914 0.019074 +vn -0.038911 -0.027589 -0.998840 +vn 0.132359 -0.027589 0.990814 +vn 0.294626 -0.955260 -0.025361 +vn -0.481643 0.875362 0.041444 +vn -0.004944 -0.055605 -0.998413 +vn 0.165716 -0.055605 0.984588 +vn 0.550249 -0.833644 -0.047365 +vn -0.746971 0.661702 0.064302 +vn 0.158361 -0.008789 0.987335 +vn 0.796167 -0.601123 -0.068514 +vn -0.012665 -0.008789 -0.999878 +vn -0.938719 0.335002 0.080782 +vn 0.031343 0.006073 -0.999481 +vn 0.201697 0.006073 0.979400 +vn 0.962523 -0.258187 -0.082827 +vn -0.985076 -0.149571 0.084780 +vn 0.183142 0.058992 0.981292 +vn 0.970550 0.225806 -0.083529 +vn 0.012726 0.058992 -0.998169 +vn -0.596454 -0.276162 0.753594 +vn -0.716483 -0.276193 -0.640584 +vn 0.698813 0.328593 0.635304 +vn 0.579943 0.328593 -0.745415 +vn 0.069216 0.978637 -0.193487 +vn 0.096744 0.957762 -0.270791 +vn 0.930601 0.049776 0.362590 +vn -0.949431 0.049776 -0.309915 +vn -0.956938 -0.023804 -0.289224 +vn -0.094760 -0.959563 0.264962 +vn -0.121921 -0.932188 0.340770 +vn 0.923368 -0.023988 0.383129 +vn 0.163244 0.874844 -0.456008 +vn 0.917356 -0.028169 0.397015 +vn -0.960875 -0.028779 -0.275460 +vn -0.186407 -0.833094 0.520737 +vn 0.053621 0.648976 -0.758873 +vn 0.932859 -0.257332 0.252022 +vn -0.984252 0.176092 -0.013642 +vn -0.322214 -0.533036 0.782281 +vn -0.528275 0.612201 -0.588275 +vn 0.741234 -0.043672 -0.669790 +vn -0.719626 0.085696 0.689016 +vn 0.535264 -0.566057 0.626911 +vn 0.814875 0.570299 0.103397 +vn 0.832148 0.544359 0.105594 +vn -0.134007 0.041261 0.990112 +vn 0.117527 0.041292 -0.992187 +vn 0.093661 0.026460 -0.995239 +vn -0.856777 -0.504074 -0.108707 +vn -0.871975 -0.476852 -0.110630 +vn -0.157872 0.026460 0.987091 +vn 0.689474 0.365551 -0.625233 +vn 0.511460 0.365551 0.777642 +vn -0.538957 -0.317301 -0.780267 +vn -0.716758 -0.317301 0.620899 +vn 0.132817 0.990966 -0.018250 +vn -0.002380 0.700980 -0.713157 +vn 0.190283 0.700980 0.687277 +vn -0.174505 0.006775 -0.984619 +vn -0.244514 -0.691366 -0.679830 +vn -0.209479 -0.977386 0.028809 +vn -0.051820 -0.691366 0.720603 +vn 0.097842 0.006775 0.995148 +vn 0.041871 0.973296 0.225562 +vn 0.029786 0.986541 0.160649 +vn 0.988433 0.025880 -0.149266 +vn -0.976135 0.025880 0.215583 +vn -0.978027 -0.034181 0.205512 +vn -0.031953 -0.984527 -0.172155 +vn -0.019807 -0.994110 -0.106540 +vn 0.986572 -0.034150 -0.159551 +vn 0.006134 0.999451 0.032075 +vn 0.987548 -0.028504 -0.154637 +vn -0.977294 -0.028871 0.209784 +vn 0.004151 -0.999695 0.023377 +vn -0.042329 0.972045 -0.230811 +vn -0.969085 -0.082308 0.232582 +vn 0.052400 -0.957457 0.283700 +vn 0.987915 -0.081729 -0.131535 +vn -0.085849 0.882015 -0.463271 +vn 0.988739 -0.003204 -0.149449 +vn -0.976501 -0.003723 0.215430 +vn 0.094455 -0.854915 0.510025 +vn -0.107944 0.806269 -0.581591 +vn -0.972747 -0.018250 0.231086 +vn 0.116031 -0.772149 0.624744 +vn 0.990844 -0.018250 -0.133702 +vn -0.780908 0.525620 -0.337382 +vn 0.607685 0.525651 -0.595294 +vn -0.600330 -0.499985 0.624165 +vn 0.784417 -0.499954 0.366985 +vn 0.227790 0.959960 0.162969 +vn 0.096622 0.992889 0.069094 +vn 0.617939 0.069521 -0.783135 +vn -0.541642 0.069521 0.837703 +vn -0.562975 -0.077029 0.822840 +vn -0.184637 -0.973876 -0.132115 +vn -0.051973 -0.997955 -0.037111 +vn 0.596912 -0.076968 -0.798578 +vn -0.108768 0.990997 -0.077853 +vn 0.608509 -0.033204 -0.792840 +vn -0.554033 -0.033357 0.831813 +vn 0.153050 -0.982086 0.109622 +vn -0.536851 0.690573 0.484603 +vn 0.285287 0.690573 -0.664571 +vn -0.253059 -0.682546 0.685598 +vn 0.567156 -0.682546 -0.460860 +vn -0.053591 0.992584 -0.109012 +vn -0.672323 0.701987 0.234809 +vn 0.596484 0.701987 -0.389050 +vn -0.884884 0.004120 0.465712 +vn -0.579333 -0.696127 0.423933 +vn 0.077853 -0.984283 0.158361 +vn 0.689474 -0.696127 -0.199896 +vn 0.909146 0.004120 -0.416395 +vn 0.060884 0.926695 0.370769 +vn 0.048952 0.953856 0.296152 +vn -0.994629 -0.015442 0.102329 +vn 0.975097 -0.015442 -0.221137 +vn 0.979553 0.051393 -0.194464 +vn -0.075014 -0.886380 -0.456801 +vn -0.063631 -0.920042 -0.386578 +vn -0.990295 0.050783 0.129276 +vn 0.060945 0.928037 0.367412 +vn -0.995086 -0.046327 0.087374 +vn 0.971129 -0.045747 -0.234016 +vn -0.075106 -0.887845 -0.453902 +vn 0.088656 0.838893 0.536973 +vn 0.977996 0.018830 -0.207709 +vn -0.101413 -0.783074 -0.613575 +vn -0.993011 0.017060 0.116520 +vn 0.113315 0.718253 0.686453 +vn -0.997162 -0.016297 0.073092 +vn 0.968535 -0.016602 -0.248268 +vn -0.123783 -0.647389 -0.752007 +vn 0.139561 0.507675 0.850154 +vn 0.974914 0.022645 -0.221381 +vn -0.147191 -0.423322 -0.893918 +vn -0.994507 0.021821 0.102084 +vn 0.147801 0.409711 0.900143 +vn 0.981903 0.042787 -0.184454 +vn -0.153630 -0.320231 -0.934782 +vn -0.989319 0.042512 0.139256 +vn 0.802698 0.281442 0.525773 +vn -0.592364 0.281442 0.754875 +vn 0.587970 -0.217811 -0.778985 +vn -0.806238 -0.217811 -0.550005 +vn -0.346202 0.938139 0.003113 +vn -0.112796 0.993591 0.001007 +vn -0.032167 -0.112613 0.993103 +vn -0.091311 0.101382 -0.990631 +vn -0.050111 -0.112613 -0.992370 +vn 0.257118 -0.966369 -0.002319 +vn 0.018097 -0.999817 -0.000153 +vn -0.073397 0.101382 0.992126 +vn 0.182714 0.983154 -0.001465 +vn -0.040834 -0.009247 0.999115 +vn -0.058870 -0.009522 -0.998199 +vn -0.272591 -0.962096 0.002350 +vn 0.260262 0.961699 -0.085665 +vn 0.125675 -0.058748 0.990326 +vn -0.231330 0.044557 -0.971831 +vn -0.380688 -0.922910 -0.057070 +vn -0.019745 0.739616 -0.672719 +vn 0.478866 0.585162 0.654378 +vn -0.536637 -0.556780 -0.634022 +vn -0.044465 -0.722190 0.690237 +vn 0.547960 0.803766 -0.231697 +vn 0.639851 0.719260 -0.270547 +vn 0.391888 0.080935 0.916410 +vn -0.384472 0.080935 -0.919553 +vn -0.459059 -0.005982 -0.888363 +vn -0.616077 -0.743339 0.260506 +vn -0.700430 -0.649342 0.296182 +vn 0.317545 -0.005982 0.948210 +vn 0.238289 0.437483 -0.867061 +vn 0.788049 0.437483 0.433027 +vn -0.825892 -0.384777 -0.412061 +vn -0.279672 -0.384777 0.879574 +vn -0.022431 0.998901 0.040742 +vn -0.634938 0.706748 -0.311960 +vn 0.603198 0.706748 0.369640 +vn -0.898221 0.000061 -0.439467 +vn -0.636067 -0.706626 -0.309915 +vn -0.024018 -0.998749 0.043641 +vn 0.602069 -0.706626 0.371685 +vn 0.851772 0.000061 0.523881 +vn 0.787164 0.490341 0.374004 +vn 0.831324 0.390973 0.394971 +vn -0.399670 0.055727 0.914945 +vn 0.456862 0.055727 -0.887783 +vn 0.374310 0.014557 -0.927152 +vn -0.816065 -0.428571 -0.387738 +vn -0.853908 -0.325846 -0.405713 +vn -0.482345 0.014557 0.875820 +vn 0.877194 0.238319 0.416791 +vn -0.454299 0.029725 0.890316 +vn 0.403272 0.029725 -0.914579 +vn -0.890042 -0.170080 -0.422895 +vn 0.900662 0.075289 0.427931 +vn 0.379345 0.032868 -0.924650 +vn -0.903195 -0.005463 -0.429151 +vn -0.477248 0.032868 0.878140 +vn 0.902402 -0.042665 0.428755 +vn -0.425825 0.034486 0.904111 +vn 0.431959 0.034486 -0.901212 +vn -0.897549 0.111728 -0.426466 +vn 0.902737 -0.032319 0.428907 +vn -0.423292 0.034669 0.905301 +vn 0.434462 0.034669 -0.899991 +vn -0.898495 0.102176 -0.426893 +vn 0.942106 -0.016755 -0.334849 +vn 0.335459 -0.016755 0.941893 +vn -0.332560 0.066164 -0.940733 +vn -0.939390 0.066164 0.336375 +vn 0.723746 0.683493 -0.094760 +vn 0.867977 0.483383 -0.113651 +vn 0.197333 0.106632 0.974487 +vn -0.060274 0.106632 -0.992462 +vn -0.244057 -0.019471 -0.969543 +vn -0.767998 -0.632466 0.100558 +vn -0.898984 -0.421827 0.117740 +vn 0.013825 -0.019471 0.999695 +vn 0.988067 0.083224 -0.129398 +vn 0.053529 0.030732 0.998077 +vn -0.205267 0.030732 -0.978210 +vn -0.991394 -0.014893 0.129826 +vn 0.610126 -0.061220 -0.789911 +vn 0.792962 -0.061220 0.606128 +vn -0.790582 0.110538 -0.602252 +vn -0.608814 0.110538 0.785546 +vn 0.939543 0.310312 0.144597 +vn 0.772088 0.219489 -0.596362 +vn 0.557024 0.219489 0.800928 +vn 0.142430 0.033631 -0.989227 +vn -0.570574 -0.171911 -0.803034 +vn -0.958708 -0.243049 -0.147557 +vn -0.785638 -0.171911 0.594256 +vn -0.161596 0.033631 0.986267 +vn -0.431501 0.608417 -0.666005 +vn -0.438429 0.590075 -0.677877 +vn 0.843043 0.030885 -0.536943 +vn -0.834559 0.030885 0.550005 +vn -0.824274 0.018494 0.565844 +vn 0.450331 -0.560381 0.695059 +vn 0.457686 -0.539079 0.707022 +vn 0.852992 0.019471 -0.521500 +vn -0.507920 0.351390 -0.786431 +vn -0.770501 -0.007233 0.637379 +vn 0.518906 -0.294656 0.802393 +vn 0.895627 -0.007477 -0.444685 +vn -0.542619 0.055177 -0.838160 +vn 0.851039 0.028443 -0.524308 +vn -0.825800 0.027741 0.563219 +vn 0.543260 0.001648 0.839534 +vn -0.541063 0.097720 -0.835261 +vn 0.816523 0.032716 -0.576342 +vn -0.859645 0.032655 0.509781 +vn 0.543321 -0.038057 0.838618 +vn -0.543535 -0.001740 -0.839381 +vn -0.788324 0.032716 0.614338 +vn 0.542589 0.061037 0.837733 +vn 0.882687 0.032624 -0.468795 +vn -0.541093 -0.097446 -0.835261 +vn 0.810480 0.023255 -0.585284 +vn -0.865291 0.023225 0.500687 +vn 0.537004 0.155644 0.829066 +vn -0.976959 0.006104 -0.213324 +vn 0.204505 0.006104 -0.978820 +vn -0.208014 0.035585 0.977447 +vn 0.977142 0.035585 0.209571 +vn 0.220099 0.960631 -0.169469 +vn 0.256691 0.946074 -0.197516 +vn 0.592944 0.031159 0.804621 +vn -0.626331 0.031159 -0.778893 +vn -0.637867 -0.010315 -0.770074 +vn -0.264718 -0.942503 0.203833 +vn -0.300760 -0.925138 0.231574 +vn 0.581378 -0.010132 0.813532 +vn 0.397870 0.864834 -0.306070 +vn -0.656514 -0.040681 -0.753197 +vn -0.437941 -0.833338 0.337199 +vn 0.560564 -0.040529 0.827113 +vn 0.535417 0.666890 -0.518204 +vn 0.617084 -0.117130 0.778100 +vn -0.735588 0.063021 -0.674459 +vn -0.643452 -0.611835 0.459944 +vn -0.058687 0.507889 -0.859401 +vn 0.969878 0.233253 0.070101 +vn -0.978698 -0.199225 -0.049104 +vn 0.040590 -0.474502 0.879299 +vn -0.522080 0.817591 -0.242775 +vn -0.593036 0.756432 -0.275765 +vn 0.468581 -0.013306 -0.883297 +vn -0.425398 0.055849 0.903256 +vn -0.373455 -0.013306 0.927549 +vn 0.564867 -0.782250 0.262642 +vn 0.632527 -0.716483 0.294137 +vn 0.416547 0.055849 -0.907376 +vn -0.765007 0.485519 0.423078 +vn -0.169469 0.485519 -0.857631 +vn 0.196936 -0.455672 0.868068 +vn 0.790704 -0.455672 -0.408795 +vn 0.595569 0.802454 -0.036775 +vn 0.377606 0.567522 -0.731620 +vn 0.464797 0.567522 0.679586 +vn -0.084811 0.018342 -0.996216 +vn -0.497604 -0.541551 -0.677541 +vn -0.641926 -0.765709 0.039644 +vn -0.410413 -0.541551 0.733634 +vn 0.038423 0.018342 0.999084 +vn 0.050264 0.998627 -0.013764 +vn 0.028199 0.999542 -0.007660 +vn -0.239326 -0.010559 -0.970855 +vn 0.289315 0.010224 0.957152 +vn 0.289102 -0.010498 0.957213 +vn -0.000519 -0.999969 0.000122 +vn 0.021638 -0.999725 -0.005921 +vn -0.239021 0.010224 -0.970946 +vn -0.057222 0.998230 0.015900 +vn -0.236579 -0.027528 -0.971191 +vn 0.291574 -0.027284 0.956145 +vn 0.107395 -0.993774 -0.029450 +vn -0.274514 0.958586 0.075442 +vn -0.217689 -0.061861 -0.974029 +vn 0.309000 -0.061647 0.949034 +vn 0.321879 -0.942656 -0.088260 +vn -0.506027 0.851283 0.138646 +vn 0.308054 -0.022950 0.951079 +vn 0.547502 -0.823206 -0.150029 +vn -0.219794 -0.022950 -0.975249 +vn -0.587024 0.793390 0.160863 +vn 0.284188 0.015351 0.958617 +vn 0.625721 -0.760949 -0.171453 +vn -0.244179 0.015351 -0.969604 +vn -0.229621 0.560015 0.795984 +vn -0.603320 0.560015 -0.567736 +vn 0.630665 -0.537034 0.560198 +vn 0.256966 -0.537034 -0.803430 +vn 0.343272 0.932310 -0.113590 +vn 0.336253 0.935148 -0.111270 +vn 0.292428 0.013092 0.956175 +vn -0.337992 0.006623 -0.941099 +vn -0.335734 0.013092 -0.941862 +vn -0.388470 -0.912412 0.128574 +vn -0.382061 -0.915433 0.126438 +vn 0.290170 0.006623 0.956938 +vn 0.503616 0.847652 -0.166662 +vn -0.381603 -0.062624 -0.922178 +vn -0.544145 -0.819391 0.180090 +vn 0.243873 -0.062624 0.967772 +vn 0.250130 0.512528 -0.821406 +vn 0.690756 0.512528 0.509995 +vn -0.716117 -0.489364 -0.497635 +vn -0.277840 -0.489364 0.826594 +vn 0.727622 0.574389 -0.374981 +vn 0.190710 0.406201 -0.893613 +vn 0.838466 0.406201 0.363231 +vn -0.470595 0.021485 -0.882046 +vn -0.856410 -0.375805 -0.353984 +vn -0.752983 -0.531388 0.388043 +vn -0.208655 -0.375805 0.902860 +vn 0.445235 0.021485 0.895138 +vn 0.014954 0.691580 0.722098 +vn 0.014527 0.728172 0.685202 +vn -0.999939 -0.001251 -0.010681 +vn 0.998627 -0.001251 -0.052126 +vn 0.999298 0.031556 -0.019257 +vn -0.015534 -0.661672 -0.749596 +vn -0.015076 -0.698691 -0.715232 +vn -0.999268 0.030976 0.021943 +vn 0.017243 0.594531 0.803858 +vn -0.996094 -0.043123 -0.076662 +vn 0.992187 -0.042817 -0.116977 +vn -0.017579 -0.560686 -0.827815 +vn 0.020234 0.239753 0.970611 +vn 0.995483 0.003784 -0.094607 +vn -0.020600 -0.201361 -0.979278 +vn -0.998535 0.003418 -0.053621 +vn 0.020692 0.021638 0.999542 +vn 0.998627 0.020447 -0.047945 +vn -0.020753 0.018952 -0.999603 +vn -0.999756 0.020173 -0.006500 +vn 0.020264 0.173009 0.984680 +vn 0.996857 0.035035 0.070925 +vn -0.020295 -0.132664 -0.990936 +vn -0.993011 0.035127 0.112552 +vn 0.019776 0.280343 0.959685 +vn -0.999481 0.006897 -0.031098 +vn 0.997314 0.006836 -0.072665 +vn -0.020051 -0.241523 -0.970183 +vn 0.720054 0.123844 0.682760 +vn -0.691122 0.123844 0.712027 +vn 0.689444 -0.095737 -0.717948 +vn -0.718619 -0.095737 -0.688742 +vn -0.755669 0.653859 -0.036775 +vn -0.796411 0.603473 -0.038759 +vn 0.084323 -0.000793 -0.996429 +vn -0.059023 0.035096 0.997620 +vn -0.012818 -0.000793 0.999908 +vn 0.781579 -0.622639 0.038026 +vn 0.820276 -0.570544 0.039918 +vn 0.038118 0.035096 -0.998627 +vn -0.908353 0.415845 -0.044252 +vn 0.120121 -0.008637 -0.992706 +vn 0.023225 -0.008637 0.999664 +vn 0.924558 -0.378307 0.045045 +vn -0.973418 0.228858 0.006165 +vn 0.004608 0.109256 0.993988 +vn 0.980346 -0.180731 0.078860 +vn 0.044710 -0.078036 -0.995941 +vn -0.693106 0.261483 0.671712 +vn -0.694143 -0.008545 -0.719748 +vn 0.698050 0.036531 0.715079 +vn 0.699850 -0.233589 -0.674978 +vn -0.948729 0.183721 0.257118 +vn -0.959197 0.111148 0.259926 +vn -0.227546 0.017212 -0.973601 +vn 0.231727 0.025697 0.972411 +vn 0.295175 0.017212 0.955260 +vn 0.955138 -0.143712 -0.258827 +vn 0.962767 -0.070681 -0.260903 +vn -0.290963 0.025697 -0.956359 +vn -0.497696 0.025849 0.866939 +vn -0.867336 0.025849 -0.497024 +vn 0.868526 0.002838 0.495590 +vn 0.499435 0.002838 -0.866329 +vn -0.347392 0.548418 0.760582 +vn 0.397443 0.387829 0.831629 +vn -0.888791 0.387829 0.244118 +vn 0.913907 0.017212 0.405530 +vn 0.895138 -0.363445 -0.258034 +vn 0.356365 -0.513962 -0.780267 +vn -0.391095 -0.363445 -0.845515 +vn -0.904904 0.017212 -0.425214 +vn -0.607196 0.523057 0.598041 +vn -0.656056 0.388806 0.646809 +vn -0.645924 0.003204 -0.763359 +vn 0.664785 0.062532 0.744377 +vn 0.753349 0.004059 0.657582 +vn 0.628285 -0.471450 -0.618824 +vn 0.672079 -0.331797 -0.661946 +vn -0.734184 0.062532 -0.676015 +vn -0.711844 -0.004486 0.702292 +vn -0.618152 0.034791 -0.785241 +vn 0.775353 0.034120 0.630573 +vn 0.710929 0.065096 -0.700217 +vn -0.710654 -0.069002 0.700125 +vn 0.635395 0.021180 0.771874 +vn 0.706595 0.127995 -0.695914 +vn -0.762047 0.021546 -0.647114 +vn -0.712302 0.019501 0.701559 +vn -0.666066 0.030274 -0.745232 +vn 0.735038 0.030274 0.677328 +vn 0.711875 0.039766 -0.701132 +vn -0.708457 0.105502 0.697775 +vn 0.637257 0.036836 0.769738 +vn 0.711692 -0.045900 -0.700949 +vn -0.759972 0.036836 -0.648885 +vn 0.003052 0.216071 0.976348 +vn -0.976196 0.216071 -0.017914 +vn 0.984527 -0.174383 0.015625 +vn -0.000671 -0.174383 -0.984649 +vn -0.056063 0.795282 0.603626 +vn -0.057405 0.783898 0.618183 +vn -0.992584 0.012909 -0.120823 +vn 0.996857 0.025849 0.074740 +vn 0.997833 0.012940 0.064089 +vn 0.060396 -0.757347 -0.650166 +vn 0.061708 -0.745109 -0.664052 +vn -0.993561 0.025849 -0.110172 +vn -0.063387 0.727775 0.682852 +vn -0.990814 -0.000153 -0.135105 +vn 0.998749 -0.000183 0.049806 +vn 0.067385 -0.685171 -0.725242 +vn 0.655751 0.480300 0.582446 +vn -0.751854 0.480300 0.451643 +vn 0.753105 -0.449171 -0.480667 +vn -0.651631 -0.449171 -0.611194 +vn -0.708518 0.118564 -0.695608 +vn -0.996368 0.083865 0.012452 +vn -0.005829 0.083865 -0.996429 +vn -0.698325 0.029969 0.715110 +vn 0.008545 -0.041444 0.999084 +vn 0.712333 -0.058596 0.699362 +vn 0.999084 -0.041444 -0.009796 +vn 0.702170 0.029969 -0.711356 +vn 0.854427 0.216376 0.472304 +vn 0.863521 0.162664 0.477340 +vn -0.464583 0.026307 0.885098 +vn 0.502396 0.026307 -0.864223 +vn 0.458876 0.018616 -0.888302 +vn -0.861812 -0.174047 -0.476394 +vn -0.869045 -0.118168 -0.480392 +vn -0.508133 0.018616 0.861049 +vn 0.872280 -0.081362 0.482162 +vn 0.410596 0.030213 -0.911283 +vn -0.868404 0.124149 -0.480026 +vn -0.553301 0.030213 0.832423 +vn 0.844478 -0.262551 0.466811 +vn -0.476058 0.019044 0.879177 +vn 0.491287 0.019044 -0.870754 +vn -0.834254 0.302164 -0.461165 +vn 0.865535 -0.147954 0.478439 +vn -0.436995 0.013123 0.899350 +vn 0.529160 0.013123 -0.848415 +vn -0.859066 0.191015 -0.474868 +vn 0.860469 0.182531 0.475631 +vn -0.398419 0.037751 0.916410 +vn 0.564104 0.037751 -0.824824 +vn -0.866604 -0.139561 -0.479049 +vn 0.814020 0.367229 0.449965 +vn 0.464858 0.015107 -0.885250 +vn -0.827113 -0.326731 -0.457228 +vn -0.502365 0.015076 0.864498 +vn 0.924955 0.237587 -0.296609 +vn 0.240791 0.237587 0.941038 +vn -0.249886 -0.208777 -0.945494 +vn -0.933561 -0.208777 0.291269 +vn -0.525681 0.657002 -0.540330 +vn -0.586047 0.541917 -0.602344 +vn 0.687979 0.060274 -0.723167 +vn -0.741783 0.060274 0.667898 +vn -0.668325 -0.015748 0.743675 +vn 0.544786 -0.624165 0.559954 +vn 0.601703 -0.505356 0.618488 +vn 0.761681 -0.015809 -0.647755 +vn -0.661946 0.314402 -0.680380 +vn 0.752098 0.006531 -0.658986 +vn -0.679342 0.006348 0.733787 +vn 0.670675 -0.273446 0.689474 +vn -0.710990 0.160009 -0.684713 +vn 0.726310 -0.041200 -0.686117 +vn -0.686819 0.077395 0.722648 +vn 0.677999 -0.113956 0.726157 +vn -0.987213 0.159398 0.000336 +vn -0.000763 -0.011139 -0.999908 +vn 0.004975 0.041292 0.999115 +vn 0.991607 -0.129093 0.001312 +vn -0.220832 0.324168 -0.919828 +vn -0.225745 0.254524 -0.940336 +vn 0.965453 0.030976 -0.258614 +vn -0.977630 0.030976 0.207892 +vn -0.962920 0.013276 0.269417 +vn 0.223884 -0.283090 0.932554 +vn 0.228095 -0.212561 0.950133 +vn 0.980285 0.013276 -0.197089 +vn -0.849513 0.128819 -0.511551 +vn 0.524644 0.128819 -0.841487 +vn -0.522172 -0.098880 0.847072 +vn 0.849818 -0.098880 0.517655 +vn 0.307596 0.441298 -0.842952 +vn -0.446638 0.312082 -0.838496 +vn 0.881710 0.312082 -0.353771 +vn -0.942289 0.019593 -0.334147 +vn -0.886135 -0.284371 0.365886 +vn -0.313852 -0.402112 0.860103 +vn 0.442213 -0.284371 0.850612 +vn 0.936064 0.019593 0.351238 +vn 0.115665 0.548967 0.827754 +vn 0.129093 0.359661 0.924100 +vn -0.998871 -0.019013 0.043428 +vn 0.995880 0.066469 -0.061647 +vn 0.972533 -0.019166 -0.231910 +vn -0.117832 -0.524308 -0.843318 +vn -0.130589 -0.331919 -0.934202 +vn -0.974609 0.066469 0.213691 +vn 0.138279 -0.048219 0.989196 +vn 0.973998 0.020386 -0.225532 +vn -0.138127 0.077273 -0.987365 +vn -0.998535 0.020295 0.049867 +vn 0.135014 -0.223090 0.965392 +vn 0.992248 0.011536 -0.123692 +vn -0.134068 0.251564 -0.958495 +vn -0.988189 0.011505 0.152776 +vn 0.137150 -0.131565 0.981750 +vn 0.994232 0.010346 -0.106449 +vn -0.136540 0.161199 -0.977416 +vn -0.985351 0.010376 0.170171 +vn 0.138157 -0.055330 0.988861 +vn -0.989563 0.014618 0.143345 +vn 0.990936 0.014618 -0.133396 +vn -0.137883 0.085147 -0.986755 +vn 0.797967 -0.032807 0.601794 +vn -0.602435 -0.032807 0.797479 +vn 0.602710 0.053926 -0.796106 +vn -0.797845 0.053926 -0.600391 +vn 0.725364 0.677419 -0.121952 +vn 0.780633 0.611011 -0.131260 +vn 0.185553 0.038087 0.981872 +vn -0.145756 0.038087 -0.988556 +vn -0.205603 -0.011567 -0.978545 +vn -0.744957 -0.655202 0.125248 +vn -0.798303 -0.587085 0.134220 +vn 0.125736 -0.011567 0.991974 +vn 0.860103 0.489151 -0.144627 +vn 0.135899 0.000580 0.990692 +vn -0.195563 0.000580 -0.980682 +vn -0.874111 -0.462905 0.146977 +vn 0.510269 0.309122 -0.802484 +vn 0.744682 0.309122 0.591449 +vn -0.753960 -0.290231 -0.589251 +vn -0.519761 -0.290231 0.803461 +vn 0.443403 0.158666 -0.882138 +vn -0.318186 0.112186 -0.941343 +vn 0.945311 0.112186 -0.306253 +vn -0.894345 0.014801 -0.447096 +vn -0.946654 -0.091250 0.308969 +vn -0.445326 -0.129063 0.885983 +vn 0.316813 -0.091250 0.944060 +vn 0.892392 0.014801 0.451003 +vn 0.054781 0.871151 0.487930 +vn 0.048280 0.901578 0.429884 +vn -0.996429 -0.018281 0.082308 +vn 0.989868 -0.018281 -0.140721 +vn 0.993042 0.033906 -0.112644 +vn -0.057894 -0.854885 -0.515549 +vn -0.051485 -0.887143 -0.458571 +vn -0.993286 0.033876 0.110416 +vn 0.049043 0.898801 0.435560 +vn -0.996368 -0.022309 0.082034 +vn 0.989746 -0.022095 -0.140965 +vn -0.052217 -0.883969 -0.464583 +vn 0.072939 0.757744 0.648427 +vn -0.997711 -0.050539 0.044374 +vn 0.982757 -0.050508 -0.177709 +vn -0.075625 -0.735923 -0.672781 +vn 0.099460 0.452101 0.886380 +vn 0.979339 -0.025788 -0.200476 +vn -0.101169 -0.423353 -0.900266 +vn -0.999420 -0.025819 0.021729 +vn 0.110660 0.130680 0.985198 +vn 0.985168 0.009186 -0.171178 +vn -0.111118 -0.099063 -0.988830 +vn -0.998627 0.009033 0.051424 +vn 0.111148 0.088778 0.989807 +vn 0.997192 0.019013 -0.072390 +vn -0.111423 -0.056703 -0.992126 +vn -0.988403 0.019013 0.150548 +vn 0.778527 0.126896 0.614612 +vn -0.622822 0.126896 0.771966 +vn 0.623554 -0.104251 -0.774773 +vn -0.779870 -0.104251 -0.617176 +vn 0.157750 0.928892 -0.335002 +vn 0.234748 0.834529 -0.498398 +vn 0.909848 0.094913 0.403882 +vn -0.890957 0.094913 -0.444044 +vn -0.928495 -0.066805 -0.365184 +vn -0.170171 -0.916745 0.361400 +vn -0.245888 -0.816675 0.522050 +vn 0.873104 -0.066775 0.482925 +vn 0.311991 0.681112 -0.662343 +vn 0.895535 0.002564 0.444929 +vn -0.913511 0.002319 -0.406781 +vn -0.321085 -0.657460 0.681600 +vn 0.284677 0.616596 -0.733970 +vn 0.916532 -0.089846 0.389691 +vn -0.939451 0.083621 -0.332255 +vn -0.383160 -0.582385 0.716910 +vn -0.426252 0.523637 -0.737602 +vn 0.906217 0.274087 -0.321848 +vn -0.907224 -0.255196 0.334330 +vn 0.423109 -0.505783 0.751732 +vn 0.187689 0.524766 -0.830256 +vn 0.187414 0.526841 -0.829005 +vn 0.973632 0.014405 0.227638 +vn -0.977264 0.013276 -0.211463 +vn -0.976867 0.014405 -0.213324 +vn -0.191321 -0.497024 0.846370 +vn -0.191076 -0.499130 0.845180 +vn 0.973205 0.013276 0.229499 +vn -0.557268 0.374065 -0.741264 +vn 0.821955 0.374065 -0.429426 +vn -0.824580 -0.354472 0.440870 +vn 0.554704 -0.354472 0.752739 +vn 0.736015 0.673849 0.064577 +vn 0.582263 0.476516 -0.658650 +vn 0.458693 0.476547 0.749992 +vn 0.076754 0.012085 -0.996948 +vn -0.473739 -0.459426 -0.751305 +vn -0.757286 -0.649678 -0.066408 +vn -0.597339 -0.459426 0.657338 +vn -0.097995 0.012085 0.995086 +vn 0.786828 0.532640 -0.311655 +vn 0.827937 0.454878 -0.327952 +vn 0.393689 0.034883 0.918546 +vn -0.342082 0.034883 -0.938994 +vn -0.408216 -0.003845 -0.912839 +vn -0.801660 -0.506424 0.317545 +vn -0.840754 -0.426832 0.333018 +vn 0.327586 -0.003845 0.944792 +vn 0.905667 0.225898 -0.358745 +vn -0.433027 0.000549 -0.901364 +vn -0.911679 -0.195868 0.361126 +vn 0.301645 0.000549 0.953398 +vn 0.928037 -0.060030 -0.367595 +vn 0.312845 0.019807 0.949583 +vn -0.422224 0.019807 -0.906247 +vn -0.925901 0.090487 0.366741 +vn 0.928434 -0.051943 -0.367748 +vn 0.428327 0.011017 0.903531 +vn -0.306558 0.011017 -0.951781 +vn -0.926542 0.082492 0.366985 +vn 0.929289 0.029969 -0.368084 +vn -0.394879 0.014985 -0.918577 +vn -0.929716 0.000793 0.368267 +vn 0.341227 0.014985 0.939848 +vn 0.397137 -0.024140 -0.917417 +vn 0.917661 -0.024140 0.396619 +vn -0.917020 0.045930 -0.396100 +vn -0.397046 0.045930 0.916623 +vn 0.409436 0.910916 0.050142 +vn 0.542558 0.837367 0.066439 +vn -0.104709 0.071352 0.991913 +vn 0.137761 0.071352 -0.987884 +vn 0.070162 -0.048647 -0.996338 +vn -0.436781 -0.897946 -0.053499 +vn -0.567797 -0.820215 -0.069521 +vn -0.172369 -0.048647 0.983825 +vn 0.826075 0.554369 0.101169 +vn -0.222694 -0.047304 0.973724 +vn 0.018891 -0.047304 -0.998688 +vn -0.842769 -0.528275 -0.103214 +vn 0.757164 0.234870 -0.609485 +vn 0.587664 0.234870 0.774224 +vn -0.597186 -0.215339 -0.772637 +vn -0.766015 -0.215339 0.605640 +vn 0.784692 0.180853 -0.592883 +vn 0.128636 0.127903 -0.983398 +vn 0.981140 0.127903 0.144841 +vn -0.604755 0.015198 -0.796228 +vn -0.984008 -0.106388 -0.142674 +vn -0.788751 -0.150487 0.595965 +vn -0.131535 -0.106418 0.985565 +vn 0.600757 0.015198 0.799280 +vn 0.273080 0.663869 0.696158 +vn 0.282113 0.635090 0.719047 +vn -0.938047 -0.002472 0.346416 +vn 0.933012 0.019440 -0.359294 +vn 0.923399 -0.002411 -0.383740 +vn -0.278146 -0.647908 -0.709098 +vn -0.286966 -0.618458 -0.731498 +vn -0.928434 0.019440 0.370891 +vn 0.314646 0.508133 0.801721 +vn -0.948271 -0.016968 0.316965 +vn 0.910947 -0.016846 -0.412152 +vn -0.318522 -0.489395 -0.811792 +vn 0.357128 0.210273 0.910062 +vn -0.960418 -0.007599 0.278420 +vn 0.893643 -0.007599 -0.448683 +vn -0.358623 -0.189276 -0.914060 +vn 0.356731 0.213141 0.909543 +vn 0.959410 0.029237 -0.280435 +vn -0.358257 -0.192785 -0.913480 +vn -0.894162 0.029298 0.446760 +vn 0.342631 0.345317 0.873684 +vn -0.942869 -0.001099 0.333079 +vn 0.917814 -0.001160 -0.396954 +vn -0.345195 -0.325724 -0.880184 +vn 0.351970 0.266518 0.897244 +vn 0.928281 0.009064 -0.371685 +vn -0.353954 -0.246101 -0.902280 +vn -0.933439 0.009033 0.358592 +vn 0.907804 0.181677 0.377941 +vn -0.408673 0.181677 0.894375 +vn 0.407239 -0.167180 -0.897855 +vn -0.909116 -0.167180 -0.381481 +vn -0.296457 0.936247 0.188482 +vn -0.475478 0.826106 0.302316 +vn -0.474471 -0.081973 -0.876400 +vn 0.507248 0.108341 0.854915 +vn 0.592364 -0.081973 0.801447 +vn 0.312632 -0.928831 -0.198767 +vn 0.489639 -0.814417 -0.311319 +vn -0.559008 0.108341 -0.822016 +vn -0.692862 0.570788 0.440565 +vn 0.579577 -0.022370 0.814600 +vn 0.702963 -0.553148 -0.446974 +vn -0.491806 -0.022370 -0.870388 +vn -0.818262 0.240303 0.522141 +vn 0.624287 -0.012299 0.781060 +vn 0.823420 -0.219916 -0.523026 +vn -0.443770 -0.016419 -0.895962 +vn -0.229255 0.003082 0.973327 +vn -0.979156 -0.002869 -0.202979 +vn 0.979492 0.017609 0.200568 +vn 0.231605 0.011658 -0.972716 +vn -0.710746 0.222480 0.667287 +vn -0.721397 0.144322 0.677267 +vn -0.656972 0.005676 -0.753868 +vn 0.659505 0.018097 0.751457 +vn 0.710959 0.005676 0.703177 +vn 0.714011 -0.201880 -0.670370 +vn 0.723472 -0.123386 -0.679220 +vn -0.708426 0.018097 -0.705527 +vn -0.031648 0.045625 0.998444 +vn -0.998444 0.045625 -0.031312 +vn 0.999054 -0.030732 0.029908 +vn 0.033082 -0.030732 -0.998962 +vn -0.250343 0.669576 0.699240 +vn 0.488662 0.473464 0.732810 +vn -0.842738 0.473464 0.256111 +vn 0.943754 0.007904 0.330454 +vn 0.846065 -0.462233 -0.265419 +vn 0.255074 -0.653706 -0.712424 +vn -0.485336 -0.462233 -0.742119 +vn -0.939055 0.007935 -0.343638 +vn 0.459151 0.767968 -0.446516 +vn 0.493881 0.724815 -0.480270 +vn 0.704215 0.030549 0.709311 +vn -0.689383 0.030549 -0.723716 +vn -0.717643 -0.012665 -0.696280 +vn -0.472182 -0.752403 0.459181 +vn -0.506180 -0.708152 0.492203 +vn 0.675985 -0.012635 0.736778 +vn 0.523911 0.682607 -0.509445 +vn 0.692770 0.010712 0.721030 +vn -0.701437 0.010651 -0.712607 +vn -0.535478 -0.664907 0.520707 +vn 0.552843 0.636647 -0.537553 +vn -0.719260 -0.009735 -0.694662 +vn -0.563707 -0.617847 0.548143 +vn 0.674337 -0.009674 0.738304 +vn 0.640492 0.449324 -0.622761 +vn -0.744469 -0.019959 -0.667318 +vn -0.648000 -0.427747 0.630146 +vn 0.646352 -0.019898 0.762749 +vn 0.686422 0.288461 -0.667501 +vn 0.689840 0.009400 0.723869 +vn -0.704367 0.009461 -0.709738 +vn -0.691122 -0.265633 0.672109 +vn -0.005341 0.193243 -0.981109 +vn 0.980590 0.193243 0.032716 +vn -0.983764 -0.176916 -0.029450 +vn 0.001953 -0.176916 0.984191 +vn -0.077853 0.989624 0.120701 +vn -0.202826 0.927335 0.314432 +vn -0.806970 -0.094333 -0.582965 +vn 0.831843 0.112918 0.543382 +vn 0.863765 -0.094333 0.494919 +vn 0.090335 -0.985992 -0.140049 +vn 0.214637 -0.918241 -0.332743 +vn -0.837977 0.112888 -0.533860 +vn -0.387707 0.698843 0.601032 +vn 0.872463 -0.044527 0.486618 +vn 0.396558 -0.681722 -0.614795 +vn -0.803003 -0.044649 -0.594256 +vn 0.272042 0.402142 0.874203 +vn -0.908597 0.402142 0.112522 +vn 0.913083 -0.388958 -0.122166 +vn -0.265084 -0.388958 -0.882260 +vn 0.324534 0.746940 -0.580279 +vn -0.387616 0.528184 -0.755455 +vn 0.846614 0.528184 -0.065188 +vn -0.877041 0.008057 -0.480331 +vn -0.852718 -0.516739 0.076113 +vn -0.333171 -0.730796 0.595752 +vn 0.381512 -0.516739 0.766411 +vn 0.868374 0.008057 0.495804 +vn -0.431654 0.744255 0.509598 +vn -0.385327 0.802759 0.455000 +vn -0.738151 -0.023591 -0.674184 +vn 0.786431 -0.023591 0.617176 +vn 0.752007 0.040315 0.657888 +vn 0.442610 -0.728690 -0.522538 +vn 0.397320 -0.788629 -0.469161 +vn -0.772637 0.040193 -0.633534 +vn -0.417066 0.763878 0.492447 +vn -0.725608 -0.045442 -0.686575 +vn 0.796533 -0.045412 0.602832 +vn 0.428510 -0.748558 -0.505966 +vn -0.558184 0.504257 0.658834 +vn 0.810419 -0.030519 0.585009 +vn 0.565539 -0.484085 -0.667684 +vn -0.710471 -0.030457 -0.703055 +vn -0.640706 0.131504 0.756401 +vn 0.821345 0.000061 0.570421 +vn 0.642445 -0.108860 -0.758538 +vn -0.697745 0.000031 -0.716300 +vn -0.646260 -0.003082 0.763085 +vn 0.739372 0.010865 0.673177 +vn 0.646046 0.025819 -0.762841 +vn -0.785546 0.010865 -0.618671 +vn -0.645314 0.055330 0.761864 +vn -0.756432 0.011109 -0.653951 +vn 0.769494 0.011109 0.638539 +vn 0.645985 -0.032258 -0.762658 +vn 0.082766 0.023988 0.996277 +vn -0.996307 0.023988 0.082247 +vn 0.996521 -0.007630 -0.082766 +vn -0.082278 -0.007630 -0.996551 +vn 0.072207 0.991333 0.109500 +vn 0.023713 0.999054 0.035951 +vn 0.843013 0.039155 -0.536424 +vn -0.825007 0.039155 0.563738 +vn -0.828394 -0.040315 0.558672 +vn -0.059633 -0.994110 -0.090426 +vn -0.011048 -0.999786 -0.016724 +vn 0.839686 -0.040284 -0.541520 +vn -0.026124 0.998871 -0.039369 +vn 0.841151 0.000000 -0.540757 +vn -0.828272 0.000275 0.560259 +vn 0.038942 -0.997497 0.058840 +vn 0.139286 0.954344 -0.264168 +vn -0.964721 -0.213355 0.154241 +vn 0.285714 -0.925718 0.247688 +vn 0.997131 0.012116 -0.074648 +vn -0.717521 0.413984 -0.560137 +vn 0.628346 0.776116 -0.052767 +vn -0.629200 -0.773980 0.070894 +vn 0.713004 -0.406171 0.571490 +vn -0.234840 0.805414 -0.544176 +vn -0.268624 0.735069 -0.622486 +vn 0.908322 0.047792 -0.415509 +vn -0.925413 0.047792 0.375866 +vn -0.899991 -0.028382 0.434919 +vn 0.242134 -0.791589 0.561022 +vn 0.275277 -0.719230 0.637898 +vn 0.933836 -0.028382 -0.356487 +vn -0.859859 0.464156 -0.212439 +vn 0.435255 0.464156 -0.771386 +vn -0.429975 -0.452315 0.781335 +vn 0.863491 -0.452315 0.223121 +vn 0.372997 0.904355 0.207282 +vn -0.079745 0.639454 0.764641 +vn 0.607227 0.639454 -0.471480 +vn -0.476547 -0.004761 0.879116 +vn -0.594256 -0.646260 0.478683 +vn -0.354595 -0.913999 -0.197089 +vn 0.092746 -0.646260 -0.757408 +vn 0.494949 -0.004761 -0.868892 +vn -0.259682 0.951353 -0.165777 +vn -0.403394 0.878018 -0.257546 +vn 0.521287 0.085452 -0.849086 +vn -0.550798 0.085452 0.830226 +vn -0.493789 -0.067721 0.866909 +vn 0.276315 -0.944700 0.176397 +vn 0.419202 -0.867519 0.267617 +vn 0.578570 -0.067721 -0.812799 +vn -0.670736 0.605579 -0.428205 +vn -0.459700 -0.053957 0.886410 +vn 0.680868 -0.589435 0.434675 +vn 0.610614 -0.053957 -0.790063 +vn -0.771233 0.403424 -0.492355 +vn -0.534104 0.009522 0.845332 +vn 0.778252 -0.383953 0.496841 +vn 0.542039 0.009522 -0.840297 +vn -0.799860 0.315317 -0.510636 +vn 0.574114 -0.002686 -0.818751 +vn -0.501053 -0.002686 0.865383 +vn 0.805322 -0.295083 0.514115 +vn -0.820429 0.228980 -0.523820 +vn -0.537797 0.010773 0.842982 +vn 0.824335 -0.208289 0.526322 +vn 0.538408 0.010773 -0.842586 +vn -0.960051 0.165014 0.225867 +vn -0.199103 0.164983 -0.965972 +vn 0.201880 -0.150365 0.967772 +vn 0.962859 -0.150365 -0.224097 +vn -0.074984 0.984863 0.156102 +vn -0.099399 0.973266 0.206977 +vn -0.893796 -0.022767 -0.447829 +vn 0.903378 0.028016 0.427869 +vn 0.908170 -0.022706 0.417920 +vn 0.083987 -0.980987 -0.174871 +vn 0.108371 -0.968169 -0.225562 +vn -0.898587 0.028047 -0.437880 +vn -0.195959 0.891690 0.407971 +vn -0.878048 -0.066744 -0.473830 +vn 0.918638 -0.066652 0.389416 +vn 0.204138 -0.881893 -0.424909 +vn 0.445692 0.566424 0.693167 +vn -0.819697 0.566393 0.085177 +vn 0.823908 -0.558306 -0.097079 +vn -0.439039 -0.558336 -0.703879 +vn 0.372906 0.455153 0.808527 +vn 0.905759 0.321848 0.275582 +vn -0.378368 0.321848 0.867885 +vn 0.906003 0.009461 -0.423109 +vn 0.375561 -0.308420 -0.873959 +vn -0.376873 -0.436140 -0.817133 +vn -0.908567 -0.308420 -0.281655 +vn -0.910001 0.009461 0.414472 +vn 0.404614 0.511551 -0.757988 +vn 0.406598 0.504410 -0.761711 +vn 0.881283 0.010559 0.472396 +vn -0.882931 0.010559 -0.469314 +vn -0.885983 0.006836 -0.463607 +vn -0.409345 -0.494217 0.766900 +vn -0.411267 -0.486953 0.770501 +vn 0.878231 0.006836 0.478133 +vn 0.414655 0.474013 -0.776727 +vn -0.889248 0.003327 -0.457350 +vn -0.419050 -0.456191 0.784997 +vn 0.874874 0.003357 0.484298 +vn 0.437513 0.370067 -0.819483 +vn -0.900662 -0.004883 -0.434462 +vn -0.440931 -0.351115 0.825983 +vn 0.862239 -0.004822 0.506424 +vn 0.467971 0.112583 -0.876522 +vn -0.917142 0.001953 -0.398480 +vn -0.468886 -0.092502 0.878384 +vn 0.841548 0.001953 0.540147 +vn 0.467452 0.120640 -0.875729 +vn 0.917814 0.019318 0.396496 +vn -0.840205 0.019318 -0.541917 +vn -0.468490 -0.100833 0.877682 +vn 0.467177 0.125095 -0.875240 +vn -0.918363 0.000458 -0.395672 +vn -0.468276 -0.105319 0.877255 +vn 0.839808 0.000458 0.542833 +vn -0.284036 -0.043123 -0.957823 +vn 0.953887 -0.043123 -0.297037 +vn -0.952849 0.057253 0.297922 +vn 0.282723 0.057253 0.957457 +vn 0.769738 0.638325 0.002594 +vn 0.901914 0.431867 0.003021 +vn 0.079653 0.080325 0.993561 +vn 0.086367 0.080325 -0.993011 +vn -0.100528 -0.037355 -0.994201 +vn -0.782006 -0.623218 -0.002625 +vn -0.910306 -0.413923 -0.003052 +vn -0.107242 -0.037355 0.993500 +vn 0.984222 0.176733 0.003296 +vn -0.014069 0.007904 0.999847 +vn -0.007324 0.007904 -0.999939 +vn -0.987426 -0.157842 -0.003327 +vn 0.994751 0.101749 -0.010132 +vn -0.026399 -0.019227 0.999451 +vn -0.025727 0.034608 -0.999054 +vn -0.996582 -0.081088 -0.013855 +vn 0.705191 0.070284 -0.705466 +vn 0.708029 -0.006348 0.706107 +vn -0.708731 0.020478 -0.705161 +vn -0.706290 -0.056124 0.705649 +vn 0.539720 0.813654 -0.215979 +vn 0.589312 0.772698 -0.235847 +vn 0.380779 0.030915 0.924131 +vn -0.361919 0.030915 -0.931669 +vn -0.396649 -0.016846 -0.917814 +vn -0.554735 -0.801843 0.221992 +vn -0.603565 -0.759819 0.241554 +vn 0.346049 -0.016846 0.938047 +vn 0.188055 0.515061 -0.836238 +vn 0.713065 0.515061 0.475600 +vn -0.722678 -0.505570 -0.471236 +vn -0.198035 -0.505570 0.839717 +vn 0.797021 0.493881 0.347575 +vn 0.846217 0.349223 -0.402356 +vn 0.280923 0.349223 0.893918 +vn 0.395245 0.008759 -0.918516 +vn -0.287240 -0.336833 -0.896664 +vn -0.805933 -0.476333 -0.351451 +vn -0.852535 -0.336833 0.399579 +vn -0.404157 0.008759 0.914609 +s 1 +f 1//1 5//2 4//3 +f 2//4 6//5 5//2 +f 3//6 7//7 2//4 +f 4//3 8//8 7//7 +f 5//2 9//9 12//10 +f 6//5 10//11 9//9 +f 7//7 11//12 10//11 +f 8//8 12//10 11//12 +f 9//9 13//13 16//14 +f 10//11 14//15 9//9 +f 11//12 15//16 14//15 +f 12//10 16//14 11//12 +f 13//13 17//17 16//14 +f 14//15 18//18 13//13 +f 15//16 19//19 14//15 +f 16//14 20//20 15//16 +f 17//17 21//21 20//20 +f 18//18 22//22 21//21 +f 19//19 23//23 18//18 +f 20//20 24//24 23//23 +f 21//21 25//25 24//24 +f 22//22 26//26 21//21 +f 23//23 27//27 22//22 +f 24//24 28//28 23//23 +f 25//25 29//29 32//30 +f 26//26 30//31 29//29 +f 27//27 31//32 30//31 +f 28//28 32//30 31//32 +f 29//29 33//33 36//34 +f 30//31 34//35 33//33 +f 31//32 35//36 34//35 +f 32//30 36//34 35//36 +f 37//37 41//38 40//39 +f 38//40 42//41 41//38 +f 39//42 43//43 38//40 +f 40//39 44//44 43//43 +f 41//38 45//45 48//46 +f 42//41 46//47 41//38 +f 43//43 47//48 46//47 +f 44//44 48//46 43//43 +f 45//45 49//49 52//50 +f 46//47 50//51 49//49 +f 47//48 51//52 50//51 +f 48//46 52//50 51//52 +f 49//49 53//53 52//50 +f 50//51 54//54 49//49 +f 51//52 55//55 50//51 +f 52//50 56//56 51//52 +f 53//53 57//57 60//58 +f 54//54 58//59 57//57 +f 55//55 59//60 58//59 +f 56//56 60//58 59//60 +f 57//57 61//61 64//62 +f 58//59 62//63 57//57 +f 59//60 63//64 62//63 +f 60//58 64//62 59//60 +f 61//61 65//65 68//66 +f 62//63 66//67 65//65 +f 63//64 67//68 66//67 +f 64//62 68//66 67//68 +f 69//69 73//70 72//71 +f 70//72 74//73 69//69 +f 71//74 75//75 70//72 +f 72//71 76//76 71//74 +f 73//70 77//77 80//78 +f 74//73 78//79 77//77 +f 75//75 79//80 78//79 +f 76//76 80//78 79//80 +f 77//77 81//81 80//78 +f 78//79 82//82 77//77 +f 79//80 83//83 78//79 +f 80//78 84//84 79//80 +f 81//81 85//85 88//86 +f 82//82 86//87 85//85 +f 83//83 87//88 86//87 +f 84//84 88//86 87//88 +f 85//85 89//89 88//86 +f 86//87 90//90 89//89 +f 87//88 91//91 86//87 +f 88//86 92//92 91//91 +f 89//89 93//93 96//94 +f 90//90 94//95 89//89 +f 91//91 95//96 94//95 +f 92//92 96//94 91//91 +f 93//93 97//97 100//98 +f 94//95 98//99 97//97 +f 95//96 99//100 98//99 +f 96//94 100//98 99//100 +f 101//101 105//102 108//103 +f 102//104 106//105 105//102 +f 103//106 107//107 106//105 +f 104//108 108//103 107//107 +f 105//102 109//109 108//103 +f 106//105 110//110 105//102 +f 107//107 111//111 106//105 +f 108//103 112//112 107//107 +f 109//109 113//113 112//112 +f 110//110 114//114 109//109 +f 111//111 115//115 110//110 +f 112//112 116//116 111//111 +f 113//113 117//117 120//118 +f 114//114 118//119 117//117 +f 115//115 119//120 118//119 +f 116//116 120//118 119//120 +f 117//117 121//121 120//118 +f 118//119 122//122 121//121 +f 119//120 123//123 118//119 +f 120//118 124//124 123//123 +f 121//121 125//125 128//126 +f 122//122 126//127 125//125 +f 123//123 127//128 126//127 +f 124//124 128//126 127//128 +f 129//129 133//130 136//131 +f 130//132 134//133 133//130 +f 131//134 135//135 134//133 +f 132//136 136//131 135//135 +f 133//130 137//137 136//131 +f 134//133 138//138 133//130 +f 135//135 139//139 134//133 +f 136//131 140//140 135//135 +f 137//137 141//141 140//140 +f 138//138 142//142 141//141 +f 139//139 143//143 138//138 +f 140//140 144//144 143//143 +f 141//141 145//145 148//146 +f 142//142 146//147 141//141 +f 143//143 147//148 146//147 +f 144//144 148//146 143//143 +f 145//145 149//149 152//150 +f 146//147 150//151 149//149 +f 147//148 151//152 150//151 +f 148//146 152//150 151//152 +f 153//153 157//154 160//155 +f 154//156 158//157 153//153 +f 155//158 159//159 158//157 +f 156//160 160//155 155//158 +f 157//154 161//161 160//155 +f 158//157 162//162 161//161 +f 159//159 163//163 158//157 +f 160//155 164//164 163//163 +f 161//161 165//165 168//166 +f 162//162 166//167 165//165 +f 163//163 167//168 166//167 +f 164//164 168//166 167//168 +f 165//165 169//169 172//170 +f 166//167 170//171 165//165 +f 167//168 171//172 170//171 +f 168//166 172//170 167//168 +f 169//169 173//173 176//174 +f 170//171 174//175 173//173 +f 171//172 175//176 174//175 +f 172//170 176//174 175//176 +f 177//177 181//178 184//179 +f 178//180 182//181 181//178 +f 179//182 183//183 182//181 +f 180//184 184//179 183//183 +f 181//178 185//185 188//186 +f 182//181 186//187 185//185 +f 183//183 187//188 186//187 +f 184//179 188//186 187//188 +f 185//185 189//189 188//186 +f 186//187 190//190 185//185 +f 187//188 191//191 186//187 +f 188//186 192//192 187//188 +f 189//189 193//193 196//194 +f 190//190 194//195 193//193 +f 191//191 195//196 194//195 +f 192//192 196//194 195//196 +f 197//197 201//198 200//199 +f 198//200 202//201 201//198 +f 199//202 203//203 198//200 +f 200//199 204//204 203//203 +f 201//198 205//205 208//206 +f 202//201 206//207 201//198 +f 203//203 207//208 206//207 +f 204//204 208//206 203//203 +f 205//205 209//209 208//206 +f 206//207 210//210 205//205 +f 207//208 211//211 206//207 +f 208//206 212//212 207//208 +f 209//209 213//213 216//214 +f 210//210 214//215 213//213 +f 211//211 215//216 214//215 +f 212//212 216//214 215//216 +f 217//217 221//218 224//219 +f 218//220 222//221 217//217 +f 219//222 223//223 222//221 +f 220//224 224//219 219//222 +f 221//218 225//225 224//219 +f 222//221 226//226 225//225 +f 223//223 227//227 222//221 +f 224//219 228//228 227//227 +f 225//225 229//229 232//230 +f 226//226 230//231 229//229 +f 227//227 231//232 230//231 +f 228//228 232//230 231//232 +f 233//233 237//234 240//235 +f 234//236 238//237 233//233 +f 235//238 239//239 238//237 +f 236//240 240//235 235//238 +f 237//234 241//241 240//235 +f 238//237 242//242 241//241 +f 239//239 243//243 238//237 +f 240//235 244//244 243//243 +f 241//241 245//245 248//246 +f 242//242 246//247 245//245 +f 243//243 247//248 246//247 +f 244//244 248//246 247//248 +f 249//249 253//250 252//251 +f 250//252 254//253 249//249 +f 251//254 255//255 250//252 +f 252//251 256//256 251//254 +f 253//250 257//257 260//258 +f 254//253 258//259 253//250 +f 255//255 259//260 258//259 +f 256//256 260//258 255//255 +f 257//257 261//261 264//262 +f 258//259 262//263 261//261 +f 259//260 263//264 262//263 +f 260//258 264//262 263//264 +f 265//265 269//266 268//267 +f 266//268 270//269 265//265 +f 267//270 271//271 266//268 +f 268//267 272//272 267//270 +f 269//266 273//273 276//274 +f 270//269 274//275 273//273 +f 271//271 275//276 274//275 +f 272//272 276//274 275//276 +f 277//277 281//278 284//279 +f 278//280 282//281 281//278 +f 279//282 283//283 282//281 +f 280//284 284//279 283//283 +f 281//278 285//285 288//286 +f 282//281 286//287 285//285 +f 283//283 287//288 286//287 +f 284//279 288//286 287//288 +f 289//289 293//290 292//291 +f 290//292 294//293 289//289 +f 291//294 295//295 290//292 +f 292//291 296//296 291//294 +f 293//290 297//297 300//298 +f 294//293 298//299 297//297 +f 295//295 299//300 298//299 +f 296//296 300//298 299//300 +f 301//301 305//302 308//303 +f 302//304 306//305 305//302 +f 303//306 307//307 306//305 +f 304//308 308//303 307//307 +f 305//302 309//309 312//310 +f 306//305 310//311 309//309 +f 307//307 311//312 310//311 +f 308//303 312//310 311//312 +f 313//313 317//314 316//315 +f 314//316 318//317 313//313 +f 315//318 319//319 314//316 +f 316//315 320//320 315//318 +f 317//314 321//321 324//322 +f 318//317 322//323 321//321 +f 319//319 323//324 322//323 +f 320//320 324//322 323//324 +f 325//325 329//326 332//327 +f 326//328 330//329 329//326 +f 327//330 331//331 330//329 +f 328//332 332//327 331//331 +f 333//333 337//334 340//335 +f 334//336 338//337 337//334 +f 335//338 339//339 338//337 +f 336//340 340//335 339//339 +f 341//341 345//342 348//343 +f 342//344 346//345 345//342 +f 343//346 347//347 346//345 +f 344//348 348//343 347//347 +f 349//349 353//350 356//351 +f 350//352 354//353 353//350 +f 351//354 355//355 354//353 +f 352//356 356//351 355//355 +f 357//357 361//358 364//359 +f 358//360 362//361 361//358 +f 359//362 363//363 362//361 +f 360//364 364//359 363//363 +f 365//365 369//366 372//367 +f 366//368 370//369 369//366 +f 367//370 371//371 370//369 +f 368//372 372//367 371//371 +f 373//373 377//374 380//375 +f 374//376 378//377 377//374 +f 375//378 379//379 378//377 +f 376//380 380//375 379//379 +f 377//374 381//381 384//382 +f 378//377 382//383 381//381 +f 379//379 383//384 382//383 +f 380//375 384//382 383//384 +f 381//381 385//385 388//386 +f 382//383 386//387 381//381 +f 383//384 387//388 386//387 +f 384//382 388//386 383//384 +f 385//385 389//389 388//386 +f 386//387 390//390 385//385 +f 387//388 391//391 386//387 +f 388//386 392//392 387//388 +f 389//389 393//393 396//394 +f 390//390 394//395 389//389 +f 391//391 395//396 394//395 +f 392//392 396//394 391//391 +f 393//393 397//397 396//394 +f 394//395 398//398 397//397 +f 395//396 399//399 394//395 +f 396//394 400//400 399//399 +f 397//397 401//401 404//402 +f 398//398 402//403 401//401 +f 399//399 403//404 402//403 +f 400//400 404//402 403//404 +f 401//401 405//405 404//402 +f 402//403 406//406 401//401 +f 403//404 407//407 402//403 +f 404//402 408//408 403//404 +f 405//405 409//409 412//410 +f 406//406 410//411 409//409 +f 407//407 411//412 410//411 +f 408//408 412//410 411//412 +f 409//409 413//413 416//414 +f 410//411 414//415 413//413 +f 411//412 415//416 414//415 +f 412//410 416//414 415//416 +f 417//417 421//418 420//419 +f 418//420 422//421 417//417 +f 419//422 423//423 418//420 +f 420//419 424//424 419//422 +f 421//418 425//425 428//426 +f 422//421 426//427 425//425 +f 423//423 427//428 426//427 +f 424//424 428//426 427//428 +f 425//425 429//429 428//426 +f 426//427 430//430 425//425 +f 427//428 431//431 426//427 +f 428//426 432//432 427//428 +f 429//429 433//433 436//434 +f 430//430 434//435 429//429 +f 431//431 435//436 434//435 +f 432//432 436//434 431//431 +f 433//433 437//437 436//434 +f 434//435 438//438 437//437 +f 435//436 439//439 434//435 +f 436//434 440//440 439//439 +f 437//437 441//441 444//442 +f 438//438 442//443 441//441 +f 439//439 443//444 442//443 +f 440//440 444//442 443//444 +f 441//441 445//445 444//442 +f 442//443 446//446 445//445 +f 443//444 447//447 442//443 +f 444//442 448//448 447//447 +f 445//445 449//449 452//450 +f 446//446 450//451 445//445 +f 447//447 451//452 450//451 +f 448//448 452//450 447//447 +f 449//449 453//453 456//454 +f 450//451 454//455 453//453 +f 451//452 455//456 454//455 +f 452//450 456//454 455//456 +f 453//453 457//457 460//458 +f 454//455 458//459 457//457 +f 455//456 459//460 458//459 +f 456//454 460//458 459//460 +f 461//461 465//462 464//463 +f 462//464 466//465 465//462 +f 463//466 467//467 462//464 +f 464//463 468//468 467//467 +f 465//462 469//469 468//468 +f 466//465 470//470 469//469 +f 467//467 471//471 466//465 +f 468//468 472//472 471//471 +f 469//469 473//473 472//472 +f 470//470 474//474 469//469 +f 471//471 475//475 470//470 +f 472//472 476//476 471//471 +f 473//473 477//477 480//478 +f 474//474 478//479 473//473 +f 475//475 479//480 478//479 +f 476//476 480//478 475//475 +f 477//477 481//481 484//482 +f 478//479 482//483 481//481 +f 479//480 483//484 482//483 +f 480//478 484//482 483//484 +f 481//481 485//485 488//486 +f 482//483 486//487 481//481 +f 483//484 487//488 486//487 +f 484//482 488//486 483//484 +f 485//485 489//489 488//486 +f 486//487 490//490 489//489 +f 487//488 491//491 486//487 +f 488//486 492//492 491//491 +f 489//489 493//493 492//492 +f 490//490 494//494 489//489 +f 491//491 495//495 490//490 +f 492//492 496//496 491//491 +f 493//493 497//497 500//498 +f 494//494 498//499 497//497 +f 495//495 499//500 498//499 +f 496//496 500//498 499//500 +f 497//497 501//501 504//502 +f 498//499 502//503 501//501 +f 499//500 503//504 502//503 +f 500//498 504//502 503//504 +f 505//505 509//506 508//507 +f 506//508 510//509 509//506 +f 507//510 511//511 506//508 +f 508//507 512//512 511//511 +f 509//506 513//513 516//514 +f 510//509 514//515 513//513 +f 511//511 515//516 514//515 +f 512//512 516//514 515//516 +f 513//513 517//517 520//518 +f 514//515 518//519 517//517 +f 515//516 519//520 518//519 +f 516//514 520//518 519//520 +f 517//517 521//521 520//518 +f 518//519 522//522 521//521 +f 519//520 523//523 518//519 +f 520//518 524//524 519//520 +f 521//521 525//525 528//526 +f 522//522 526//527 521//521 +f 523//523 527//528 526//527 +f 524//524 528//526 523//523 +f 525//525 529//529 532//530 +f 526//527 530//531 529//529 +f 527//528 531//532 530//531 +f 528//526 532//530 531//532 +f 529//529 533//533 536//534 +f 530//531 534//535 533//533 +f 531//532 535//536 534//535 +f 532//530 536//534 535//536 +f 533//533 537//537 536//534 +f 534//535 538//538 533//533 +f 535//536 539//539 534//535 +f 536//534 540//540 535//536 +f 537//537 541//541 540//540 +f 538//538 542//542 537//537 +f 539//539 543//543 538//538 +f 540//540 544//544 539//539 +f 541//541 545//545 548//546 +f 542//542 546//547 545//545 +f 543//543 547//548 546//547 +f 544//544 548//546 547//548 +f 549//549 553//550 556//551 +f 550//552 554//553 553//550 +f 551//554 555//555 554//553 +f 552//556 556//551 555//555 +f 553//550 557//557 556//551 +f 554//553 558//558 553//550 +f 555//555 559//559 554//553 +f 556//551 560//560 555//555 +f 557//557 561//561 564//562 +f 558//558 562//563 557//557 +f 559//559 563//564 562//563 +f 560//560 564//562 559//559 +f 561//561 565//565 564//562 +f 562//563 566//566 565//565 +f 563//564 567//567 562//563 +f 564//562 568//568 567//567 +f 565//565 569//569 568//568 +f 566//566 570//570 565//565 +f 567//567 571//571 566//566 +f 568//568 572//572 567//567 +f 569//569 573//573 572//572 +f 570//570 574//574 573//573 +f 571//571 575//575 570//570 +f 572//572 576//576 575//575 +f 573//573 577//577 580//578 +f 574//574 578//579 573//573 +f 575//575 579//580 578//579 +f 576//576 580//578 575//575 +f 577//577 581//581 580//578 +f 578//579 582//582 577//577 +f 579//580 583//583 578//579 +f 580//578 584//584 579//580 +f 581//581 585//585 584//584 +f 582//582 586//586 581//581 +f 583//583 587//587 582//582 +f 584//584 588//588 583//583 +f 585//585 589//589 592//590 +f 586//586 590//591 589//589 +f 587//587 591//592 590//591 +f 588//588 592//590 591//592 +f 593//593 597//594 596//595 +f 594//596 598//597 597//594 +f 595//598 599//599 594//596 +f 596//595 600//600 599//599 +f 597//594 601//601 604//602 +f 598//597 602//603 597//594 +f 599//599 603//604 602//603 +f 600//600 604//602 599//599 +f 601//601 605//605 604//602 +f 602//603 606//606 605//605 +f 603//604 607//607 602//603 +f 604//602 608//608 607//607 +f 605//605 609//609 608//608 +f 606//606 610//610 605//605 +f 607//607 611//611 606//606 +f 608//608 612//612 607//607 +f 609//609 613//613 616//614 +f 610//610 614//615 613//613 +f 611//611 615//616 614//615 +f 612//612 616//614 615//616 +f 613//613 617//617 620//618 +f 614//615 618//619 613//613 +f 615//616 619//620 618//619 +f 616//614 620//618 615//616 +f 617//617 621//621 624//622 +f 618//619 622//623 621//621 +f 619//620 623//624 622//623 +f 620//618 624//622 623//624 +f 621//621 625//625 624//622 +f 622//623 626//626 621//621 +f 623//624 627//627 622//623 +f 624//622 628//628 623//624 +f 625//625 629//629 632//630 +f 626//626 630//631 625//625 +f 627//627 631//632 630//631 +f 628//628 632//630 627//627 +f 629//629 633//633 636//634 +f 630//631 634//635 633//633 +f 631//632 635//636 634//635 +f 632//630 636//634 635//636 +f 637//637 641//638 640//639 +f 638//640 642//641 641//638 +f 639//642 643//643 638//640 +f 640//639 644//644 643//643 +f 641//638 645//645 648//646 +f 642//641 646//647 641//638 +f 643//643 647//648 646//647 +f 644//644 648//646 643//643 +f 645//645 649//649 648//646 +f 646//647 650//650 645//645 +f 647//648 651//651 646//647 +f 648//646 652//652 647//648 +f 649//649 653//653 656//654 +f 650//650 654//655 653//653 +f 651//651 655//656 654//655 +f 652//652 656//654 655//656 +f 653//653 657//657 660//658 +f 654//655 658//659 657//657 +f 655//656 659//660 658//659 +f 656//654 660//658 659//660 +f 657//657 661//661 664//662 +f 658//659 662//663 657//657 +f 659//660 663//664 662//663 +f 660//658 664//662 663//664 +f 661//661 665//665 664//662 +f 662//663 666//666 661//661 +f 663//664 667//667 662//663 +f 664//662 668//668 663//664 +f 665//665 669//669 668//668 +f 666//666 670//670 669//669 +f 667//667 671//671 666//666 +f 668//668 672//672 671//671 +f 669//669 673//673 676//674 +f 670//670 674//675 673//673 +f 671//671 675//676 674//675 +f 672//672 676//674 675//676 +f 673//673 677//677 680//678 +f 674//675 678//679 677//677 +f 675//676 679//680 678//679 +f 676//674 680//678 679//680 +f 681//681 685//682 684//683 +f 682//684 686//685 681//681 +f 683//686 687//687 682//684 +f 684//683 688//688 683//686 +f 685//682 689//689 692//690 +f 686//685 690//691 689//689 +f 687//687 691//692 690//691 +f 688//688 692//690 691//692 +f 689//689 693//693 696//694 +f 690//691 694//695 693//693 +f 691//692 695//696 694//695 +f 692//690 696//694 695//696 +f 693//693 697//697 700//698 +f 694//695 698//699 693//693 +f 695//696 699//700 698//699 +f 696//694 700//698 695//696 +f 697//697 701//701 700//698 +f 698//699 702//702 701//701 +f 699//700 703//703 698//699 +f 700//698 704//704 703//703 +f 701//701 705//705 704//704 +f 702//702 706//706 701//701 +f 703//703 707//707 702//702 +f 704//704 708//708 703//703 +f 705//705 709//709 712//710 +f 706//706 710//711 709//709 +f 707//707 711//712 710//711 +f 708//708 712//710 711//712 +f 709//709 713//713 712//710 +f 710//711 714//714 713//713 +f 711//712 715//715 710//711 +f 712//710 716//716 715//715 +f 713//713 717//717 720//718 +f 714//714 718//719 713//713 +f 715//715 719//720 718//719 +f 716//716 720//718 715//715 +f 717//717 721//721 724//722 +f 718//719 722//723 721//721 +f 719//720 723//724 722//723 +f 720//718 724//722 723//724 +f 725//725 729//726 732//727 +f 726//728 730//729 729//726 +f 727//730 731//731 730//729 +f 728//732 732//727 731//731 +f 729//726 733//733 736//734 +f 730//729 734//735 733//733 +f 731//731 735//736 734//735 +f 732//727 736//734 735//736 +f 733//733 737//737 736//734 +f 734//735 738//738 737//737 +f 735//736 739//739 734//735 +f 736//734 740//740 739//739 +f 737//737 741//741 744//742 +f 738//738 742//743 737//737 +f 739//739 743//744 742//743 +f 740//740 744//742 739//739 +f 741//741 745//745 748//746 +f 742//743 746//747 741//741 +f 743//744 747//748 742//743 +f 744//742 748//746 743//744 +f 745//745 749//749 748//746 +f 746//747 750//750 749//749 +f 747//748 751//751 746//747 +f 748//746 752//752 751//751 +f 749//749 753//753 752//752 +f 750//750 754//754 753//753 +f 751//751 755//755 750//750 +f 752//752 756//756 755//755 +f 753//753 757//757 760//758 +f 754//754 758//759 753//753 +f 755//755 759//760 758//759 +f 756//756 760//758 755//755 +f 757//757 761//761 760//758 +f 758//759 762//762 761//761 +f 759//760 763//763 758//759 +f 760//758 764//764 763//763 +f 761//761 765//765 768//766 +f 762//762 766//767 765//765 +f 763//763 767//768 766//767 +f 764//764 768//766 767//768 +f 769//769 773//770 772//771 +f 770//772 774//773 773//770 +f 771//774 775//775 770//772 +f 772//771 776//776 775//775 +f 773//770 777//777 780//778 +f 774//773 778//779 773//770 +f 775//775 779//780 778//779 +f 776//776 780//778 775//775 +f 777//777 781//781 780//778 +f 778//779 782//782 781//781 +f 779//780 783//783 778//779 +f 780//778 784//784 783//783 +f 781//781 785//785 784//784 +f 782//782 786//786 781//781 +f 783//783 787//787 782//782 +f 784//784 788//788 783//783 +f 785//785 789//789 792//790 +f 786//786 790//791 789//789 +f 787//787 791//792 790//791 +f 788//788 792//790 791//792 +f 789//789 793//793 796//794 +f 790//791 794//795 789//789 +f 791//792 795//796 794//795 +f 792//790 796//794 791//792 +f 793//793 797//797 796//794 +f 794//795 798//798 793//793 +f 795//796 799//799 794//795 +f 796//794 800//800 795//796 +f 797//797 801//801 804//802 +f 798//798 802//803 801//801 +f 799//799 803//804 802//803 +f 800//800 804//802 803//804 +f 801//801 805//805 804//802 +f 802//803 806//806 801//801 +f 803//804 807//807 802//803 +f 804//802 808//808 803//804 +f 805//805 809//809 812//810 +f 806//806 810//811 809//809 +f 807//807 811//812 810//811 +f 808//808 812//810 811//812 +f 813//813 817//814 816//815 +f 814//816 818//817 813//813 +f 815//818 819//819 814//816 +f 816//815 820//820 819//819 +f 817//814 821//821 824//822 +f 818//817 822//823 821//821 +f 819//819 823//824 822//823 +f 820//820 824//822 823//824 +f 821//821 825//825 824//822 +f 822//823 826//826 825//825 +f 823//824 827//827 822//823 +f 824//822 828//828 827//827 +f 825//825 829//829 832//830 +f 826//826 830//831 825//825 +f 827//827 831//832 830//831 +f 828//828 832//830 827//827 +f 829//829 833//833 836//834 +f 830//831 834//835 833//833 +f 831//832 835//836 834//835 +f 832//830 836//834 835//836 +f 833//833 837//837 840//838 +f 834//835 838//839 833//833 +f 835//836 839//840 838//839 +f 836//834 840//838 835//836 +f 837//837 841//841 840//838 +f 838//839 842//842 841//841 +f 839//840 843//843 838//839 +f 840//838 844//844 843//843 +f 841//841 845//845 844//844 +f 842//842 846//846 845//845 +f 843//843 847//847 842//842 +f 844//844 848//848 847//847 +f 845//845 849//849 852//850 +f 846//846 850//851 845//845 +f 847//847 851//852 850//851 +f 848//848 852//850 847//847 +f 849//849 853//853 856//854 +f 850//851 854//855 853//853 +f 851//852 855//856 854//855 +f 852//850 856//854 855//856 +f 857//857 861//858 864//859 +f 858//860 862//861 857//857 +f 859//862 863//863 862//861 +f 860//864 864//859 859//862 +f 861//858 865//865 864//859 +f 862//861 866//866 865//865 +f 863//863 867//867 862//861 +f 864//859 868//868 867//867 +f 865//865 869//869 868//868 +f 866//866 870//870 869//869 +f 867//867 871//871 866//866 +f 868//868 872//872 871//871 +f 869//869 873//873 872//872 +f 870//870 874//874 873//873 +f 871//871 875//875 870//870 +f 872//872 876//876 875//875 +f 873//873 877//877 876//876 +f 874//874 878//878 877//877 +f 875//875 879//879 874//874 +f 876//876 880//880 879//879 +f 877//877 881//881 884//882 +f 878//878 882//883 881//881 +f 879//879 883//884 882//883 +f 880//880 884//882 883//884 +f 881//881 885//885 888//886 +f 882//883 886//887 881//881 +f 883//884 887//888 886//887 +f 884//882 888//886 883//884 +f 885//885 889//889 888//886 +f 886//887 890//890 889//889 +f 887//888 891//891 886//887 +f 888//886 892//892 891//891 +f 889//889 893//893 896//894 +f 890//890 894//895 893//893 +f 891//891 895//896 894//895 +f 892//892 896//894 895//896 +f 893//893 897//897 900//898 +f 894//895 898//899 897//897 +f 895//896 899//900 898//899 +f 896//894 900//898 899//900 +f 901//901 905//902 908//903 +f 902//904 906//905 905//902 +f 903//906 907//907 906//905 +f 904//908 908//903 907//907 +f 905//902 909//909 912//910 +f 906//905 910//911 909//909 +f 907//907 911//912 910//911 +f 908//903 912//910 911//912 +f 909//909 913//913 912//910 +f 910//911 914//914 909//909 +f 911//912 915//915 910//911 +f 912//910 916//916 911//912 +f 913//913 917//917 920//918 +f 914//914 918//919 913//913 +f 915//915 919//920 918//919 +f 916//916 920//918 915//915 +f 917//917 921//921 920//918 +f 918//919 922//922 917//917 +f 919//920 923//923 918//919 +f 920//918 924//924 919//920 +f 921//921 925//925 928//926 +f 922//922 926//927 921//921 +f 923//923 927//928 926//927 +f 924//924 928//926 923//923 +f 925//925 929//929 928//926 +f 926//927 930//930 929//929 +f 927//928 931//931 926//927 +f 928//926 932//932 931//931 +f 929//929 933//933 932//932 +f 930//930 934//934 933//933 +f 931//931 935//935 930//930 +f 932//932 936//936 935//935 +f 933//933 937//937 940//938 +f 934//934 938//939 937//937 +f 935//935 939//940 938//939 +f 936//936 940//938 939//940 +f 937//937 941//941 944//942 +f 938//939 942//943 941//941 +f 939//940 943//944 942//943 +f 940//938 944//942 943//944 +f 945//945 949//946 948//947 +f 946//948 950//949 949//946 +f 947//950 951//951 946//948 +f 948//947 952//952 951//951 +f 949//946 953//953 956//954 +f 950//949 954//955 953//953 +f 951//951 955//956 954//955 +f 952//952 956//954 955//956 +f 953//953 957//957 956//954 +f 954//955 958//958 953//953 +f 955//956 959//959 954//955 +f 956//954 960//960 955//956 +f 957//957 961//961 964//962 +f 958//958 962//963 957//957 +f 959//959 963//964 962//963 +f 960//960 964//962 959//959 +f 961//961 965//965 968//966 +f 962//963 966//967 961//961 +f 963//964 967//968 966//967 +f 964//962 968//966 963//964 +f 965//965 969//969 968//966 +f 966//967 970//970 965//965 +f 967//968 971//971 966//967 +f 968//966 972//972 967//968 +f 969//969 973//973 976//974 +f 970//970 974//975 973//973 +f 971//971 975//976 974//975 +f 972//972 976//974 975//976 +f 973//973 977//977 980//978 +f 974//975 978//979 973//973 +f 975//976 979//980 978//979 +f 976//974 980//978 975//976 +f 977//977 981//981 980//978 +f 978//979 982//982 981//981 +f 979//980 983//983 978//979 +f 980//978 984//984 983//983 +f 981//981 985//985 988//986 +f 982//982 986//987 985//985 +f 983//983 987//988 986//987 +f 984//984 988//986 987//988 +f 989//989 993//990 992//991 +f 990//992 994//993 989//989 +f 991//994 995//995 990//992 +f 992//991 996//996 991//994 +f 993//990 997//997 996//996 +f 994//993 998//998 993//990 +f 995//995 999//999 994//993 +f 996//996 1000//1000 995//995 +f 997//997 1001//1001 1004//1002 +f 998//998 1002//1003 997//997 +f 999//999 1003//1004 1002//1003 +f 1000//1000 1004//1002 999//999 +f 1001//1001 1005//1005 1004//1002 +f 1002//1003 1006//1006 1005//1005 +f 1003//1004 1007//1007 1002//1003 +f 1004//1002 1008//1008 1007//1007 +f 1005//1005 1009//1009 1012//1010 +f 1006//1006 1010//1011 1009//1009 +f 1007//1007 1011//1012 1010//1011 +f 1008//1008 1012//1010 1011//1012 +f 1009//1009 1013//1013 1016//1014 +f 1010//1011 1014//1015 1013//1013 +f 1011//1012 1015//1016 1014//1015 +f 1012//1010 1016//1014 1015//1016 +f 1013//1013 1017//1017 1016//1014 +f 1014//1015 1018//1018 1017//1017 +f 1015//1016 1019//1019 1014//1015 +f 1016//1014 1020//1020 1019//1019 +f 1017//1017 1021//1021 1024//1022 +f 1018//1018 1022//1023 1021//1021 +f 1019//1019 1023//1024 1022//1023 +f 1020//1020 1024//1022 1023//1024 +f 1021//1021 1025//1025 1028//1026 +f 1022//1023 1026//1027 1025//1025 +f 1023//1024 1027//1028 1026//1027 +f 1024//1022 1028//1026 1027//1028 +f 1025//1025 1029//1029 1032//1030 +f 1026//1027 1030//1031 1029//1029 +f 1027//1028 1031//1032 1030//1031 +f 1028//1026 1032//1030 1031//1032 +f 1033//1033 1037//1034 1040//1035 +f 1034//1036 1038//1037 1033//1033 +f 1035//1038 1039//1039 1038//1037 +f 1036//1040 1040//1035 1035//1038 +f 1037//1034 1041//1041 1044//1042 +f 1038//1037 1042//1043 1037//1034 +f 1039//1039 1043//1044 1042//1043 +f 1040//1035 1044//1042 1039//1039 +f 1041//1041 1045//1045 1044//1042 +f 1042//1043 1046//1046 1045//1045 +f 1043//1044 1047//1047 1042//1043 +f 1044//1042 1048//1048 1047//1047 +f 1045//1045 1049//1049 1052//1050 +f 1046//1046 1050//1051 1049//1049 +f 1047//1047 1051//1052 1050//1051 +f 1048//1048 1052//1050 1051//1052 +f 1049//1049 1053//1053 1052//1050 +f 1050//1051 1054//1054 1053//1053 +f 1051//1052 1055//1055 1050//1051 +f 1052//1050 1056//1056 1055//1055 +f 1053//1053 1057//1057 1056//1056 +f 1054//1054 1058//1058 1057//1057 +f 1055//1055 1059//1059 1054//1054 +f 1056//1056 1060//1060 1059//1059 +f 1057//1057 1061//1061 1064//1062 +f 1058//1058 1062//1063 1057//1057 +f 1059//1059 1063//1064 1062//1063 +f 1060//1060 1064//1062 1059//1059 +f 1061//1061 1065//1065 1064//1062 +f 1062//1063 1066//1066 1061//1061 +f 1063//1064 1067//1067 1062//1063 +f 1064//1062 1068//1068 1063//1064 +f 1065//1065 1069//1069 1072//1070 +f 1066//1066 1070//1071 1069//1069 +f 1067//1067 1071//1072 1070//1071 +f 1068//1068 1072//1070 1071//1072 +f 1069//1069 1073//1073 1076//1074 +f 1070//1071 1074//1075 1073//1073 +f 1071//1072 1075//1076 1074//1075 +f 1072//1070 1076//1074 1075//1076 +f 1077//1077 1081//1078 1080//1079 +f 1078//1080 1082//1081 1077//1077 +f 1079//1082 1083//1083 1078//1080 +f 1080//1079 1084//1084 1079//1082 +f 1081//1078 1085//1085 1088//1086 +f 1082//1081 1086//1087 1085//1085 +f 1083//1083 1087//1088 1086//1087 +f 1084//1084 1088//1086 1087//1088 +f 1085//1085 1089//1089 1088//1086 +f 1086//1087 1090//1090 1089//1089 +f 1087//1088 1091//1091 1086//1087 +f 1088//1086 1092//1092 1091//1091 +f 1089//1089 1093//1093 1096//1094 +f 1090//1090 1094//1095 1089//1089 +f 1091//1091 1095//1096 1094//1095 +f 1092//1092 1096//1094 1091//1091 +f 1093//1093 1097//1097 1096//1094 +f 1094//1095 1098//1098 1097//1097 +f 1095//1096 1099//1099 1094//1095 +f 1096//1094 1100//1100 1099//1099 +f 1097//1097 1101//1101 1100//1100 +f 1098//1098 1102//1102 1097//1097 +f 1099//1099 1103//1103 1098//1098 +f 1100//1100 1104//1104 1099//1099 +f 1101//1101 1105//1105 1108//1106 +f 1102//1102 1106//1107 1101//1101 +f 1103//1103 1107//1108 1106//1107 +f 1104//1104 1108//1106 1103//1103 +f 1105//1105 1109//1109 1108//1106 +f 1106//1107 1110//1110 1105//1105 +f 1107//1108 1111//1111 1106//1107 +f 1108//1106 1112//1112 1107//1108 +f 1109//1109 1113//1113 1112//1112 +f 1110//1110 1114//1114 1113//1113 +f 1111//1111 1115//1115 1110//1110 +f 1112//1112 1116//1116 1115//1115 +f 1113//1113 1117//1117 1120//1118 +f 1114//1114 1118//1119 1117//1117 +f 1115//1115 1119//1120 1118//1119 +f 1116//1116 1120//1118 1119//1120 +f 1121//1121 1125//1122 1128//1123 +f 1122//1124 1126//1125 1125//1122 +f 1123//1126 1127//1127 1126//1125 +f 1124//1128 1128//1123 1127//1127 +f 1125//1122 1129//1129 1132//1130 +f 1126//1125 1130//1131 1129//1129 +f 1127//1127 1131//1132 1130//1131 +f 1128//1123 1132//1130 1131//1132 +f 1129//1129 1133//1133 1132//1130 +f 1130//1131 1134//1134 1129//1129 +f 1131//1132 1135//1135 1130//1131 +f 1132//1130 1136//1136 1131//1132 +f 1133//1133 1137//1137 1136//1136 +f 1134//1134 1138//1138 1137//1137 +f 1135//1135 1139//1139 1134//1134 +f 1136//1136 1140//1140 1139//1139 +f 1137//1137 1141//1141 1144//1142 +f 1138//1138 1142//1143 1137//1137 +f 1139//1139 1143//1144 1142//1143 +f 1140//1140 1144//1142 1139//1139 +f 1141//1141 1145//1145 1144//1142 +f 1142//1143 1146//1146 1145//1145 +f 1143//1144 1147//1147 1142//1143 +f 1144//1142 1148//1148 1147//1147 +f 1145//1145 1149//1149 1148//1148 +f 1146//1146 1150//1150 1149//1149 +f 1147//1147 1151//1151 1146//1146 +f 1148//1148 1152//1152 1151//1151 +f 1149//1149 1153//1153 1152//1152 +f 1150//1150 1154//1154 1153//1153 +f 1151//1151 1155//1155 1150//1150 +f 1152//1152 1156//1156 1155//1155 +f 1153//1153 1157//1157 1160//1158 +f 1154//1154 1158//1159 1153//1153 +f 1155//1155 1159//1160 1158//1159 +f 1156//1156 1160//1158 1155//1155 +f 1157//1157 1161//1161 1164//1162 +f 1158//1159 1162//1163 1161//1161 +f 1159//1160 1163//1164 1162//1163 +f 1160//1158 1164//1162 1163//1164 +f 1165//1165 1169//1166 1172//1167 +f 1166//1168 1170//1169 1165//1165 +f 1167//1170 1171//1171 1170//1169 +f 1168//1172 1172//1167 1167//1170 +f 1169//1166 1173//1173 1172//1167 +f 1170//1169 1174//1174 1173//1173 +f 1171//1171 1175//1175 1170//1169 +f 1172//1167 1176//1176 1175//1175 +f 1173//1173 1177//1177 1176//1176 +f 1174//1174 1178//1178 1173//1173 +f 1175//1175 1179//1179 1174//1174 +f 1176//1176 1180//1180 1175//1175 +f 1177//1177 1181//1181 1180//1180 +f 1178//1178 1182//1182 1181//1181 +f 1179//1179 1183//1183 1178//1178 +f 1180//1180 1184//1184 1183//1183 +f 1181//1181 1185//1185 1188//1186 +f 1182//1182 1186//1187 1185//1185 +f 1183//1183 1187//1188 1186//1187 +f 1184//1184 1188//1186 1187//1188 +f 1185//1185 1189//1189 1188//1186 +f 1186//1187 1190//1190 1189//1189 +f 1187//1188 1191//1191 1186//1187 +f 1188//1186 1192//1192 1191//1191 +f 1189//1189 1193//1193 1192//1192 +f 1190//1190 1194//1194 1193//1193 +f 1191//1191 1195//1195 1190//1190 +f 1192//1192 1196//1196 1195//1195 +f 1193//1193 1197//1197 1200//1198 +f 1194//1194 1198//1199 1197//1197 +f 1195//1195 1199//1200 1198//1199 +f 1196//1196 1200//1198 1199//1200 +f 1197//1197 1201//1201 1200//1198 +f 1198//1199 1202//1202 1197//1197 +f 1199//1200 1203//1203 1198//1199 +f 1200//1198 1204//1204 1199//1200 +f 1201//1201 1205//1205 1208//1206 +f 1202//1202 1206//1207 1205//1205 +f 1203//1203 1207//1208 1206//1207 +f 1204//1204 1208//1206 1207//1208 +f 1209//1209 1213//1210 1216//1211 +f 1210//1212 1214//1213 1209//1209 +f 1211//1214 1215//1215 1214//1213 +f 1212//1216 1216//1211 1211//1214 +f 1213//1210 1217//1217 1216//1211 +f 1214//1213 1218//1218 1217//1217 +f 1215//1215 1219//1219 1214//1213 +f 1216//1211 1220//1220 1219//1219 +f 1217//1217 1221//1221 1224//1222 +f 1218//1218 1222//1223 1217//1217 +f 1219//1219 1223//1224 1222//1223 +f 1220//1220 1224//1222 1219//1219 +f 1221//1221 1225//1225 1228//1226 +f 1222//1223 1226//1227 1225//1225 +f 1223//1224 1227//1228 1226//1227 +f 1224//1222 1228//1226 1227//1228 +f 1225//1225 1229//1229 1228//1226 +f 1226//1227 1230//1230 1225//1225 +f 1227//1228 1231//1231 1226//1227 +f 1228//1226 1232//1232 1227//1228 +f 1229//1229 1233//1233 1232//1232 +f 1230//1230 1234//1234 1233//1233 +f 1231//1231 1235//1235 1230//1230 +f 1232//1232 1236//1236 1235//1235 +f 1233//1233 1237//1237 1240//1238 +f 1234//1234 1238//1239 1233//1233 +f 1235//1235 1239//1240 1238//1239 +f 1236//1236 1240//1238 1235//1235 +f 1237//1237 1241//1241 1244//1242 +f 1238//1239 1242//1243 1241//1241 +f 1239//1240 1243//1244 1242//1243 +f 1240//1238 1244//1242 1243//1244 +f 1241//1241 1245//1245 1244//1242 +f 1242//1243 1246//1246 1241//1241 +f 1243//1244 1247//1247 1242//1243 +f 1244//1242 1248//1248 1243//1244 +f 1245//1245 1249//1249 1252//1250 +f 1246//1246 1250//1251 1249//1249 +f 1247//1247 1251//1252 1250//1251 +f 1248//1248 1252//1250 1251//1252 +f 1253//1253 1257//1254 1260//1255 +f 1254//1256 1258//1257 1257//1254 +f 1255//1258 1259//1259 1258//1257 +f 1256//1260 1260//1255 1259//1259 +f 1257//1254 1261//1261 1260//1255 +f 1258//1257 1262//1262 1257//1254 +f 1259//1259 1263//1263 1258//1257 +f 1260//1255 1264//1264 1259//1259 +f 1261//1261 1265//1265 1268//1266 +f 1262//1262 1266//1267 1261//1261 +f 1263//1263 1267//1268 1266//1267 +f 1264//1264 1268//1266 1263//1263 +f 1265//1265 1269//1269 1272//1270 +f 1266//1267 1270//1271 1269//1269 +f 1267//1268 1271//1272 1270//1271 +f 1268//1266 1272//1270 1271//1272 +f 1269//1269 1273//1273 1272//1270 +f 1270//1271 1274//1274 1269//1269 +f 1271//1272 1275//1275 1270//1271 +f 1272//1270 1276//1276 1271//1272 +f 1273//1273 1277//1277 1280//1278 +f 1274//1274 1278//1279 1277//1277 +f 1275//1275 1279//1280 1278//1279 +f 1276//1276 1280//1278 1279//1280 +f 1277//1277 1281//1281 1280//1278 +f 1278//1279 1282//1282 1277//1277 +f 1279//1280 1283//1283 1278//1279 +f 1280//1278 1284//1284 1279//1280 +f 1281//1281 1285//1285 1288//1286 +f 1282//1282 1286//1287 1285//1285 +f 1283//1283 1287//1288 1286//1287 +f 1284//1284 1288//1286 1287//1288 +f 1285//1285 1289//1289 1292//1290 +f 1286//1287 1290//1291 1285//1285 +f 1287//1288 1291//1292 1290//1291 +f 1288//1286 1292//1290 1287//1288 +f 1289//1289 1293//1293 1296//1294 +f 1290//1291 1294//1295 1293//1293 +f 1291//1292 1295//1296 1294//1295 +f 1292//1290 1296//1294 1295//1296 +f 1297//1297 1301//1298 1300//1299 +f 1298//1300 1302//1301 1297//1297 +f 1299//1302 1303//1303 1298//1300 +f 1300//1299 1304//1304 1299//1302 +f 1301//1298 1305//1305 1308//1306 +f 1302//1301 1306//1307 1305//1305 +f 1303//1303 1307//1308 1306//1307 +f 1304//1304 1308//1306 1307//1308 +f 1305//1305 1309//1309 1312//1310 +f 1306//1307 1310//1311 1309//1309 +f 1307//1308 1311//1312 1310//1311 +f 1308//1306 1312//1310 1311//1312 +f 1309//1309 1313//1313 1312//1310 +f 1310//1311 1314//1314 1313//1313 +f 1311//1312 1315//1315 1310//1311 +f 1312//1310 1316//1316 1315//1315 +f 1313//1313 1317//1317 1320//1318 +f 1314//1314 1318//1319 1317//1317 +f 1315//1315 1319//1320 1318//1319 +f 1316//1316 1320//1318 1319//1320 +f 1317//1317 1321//1321 1324//1322 +f 1318//1319 1322//1323 1317//1317 +f 1319//1320 1323//1324 1318//1319 +f 1320//1318 1324//1322 1319//1320 +f 1321//1321 1325//1325 1328//1326 +f 1322//1323 1326//1327 1321//1321 +f 1323//1324 1327//1328 1326//1327 +f 1324//1322 1328//1326 1323//1324 +f 1325//1325 1329//1329 1328//1326 +f 1326//1327 1330//1330 1329//1329 +f 1327//1328 1331//1331 1326//1327 +f 1328//1326 1332//1332 1331//1331 +f 1329//1329 1333//1333 1332//1332 +f 1330//1330 1334//1334 1333//1333 +f 1331//1331 1335//1335 1330//1330 +f 1332//1332 1336//1336 1335//1335 +f 1333//1333 1337//1337 1340//1338 +f 1334//1334 1338//1339 1337//1337 +f 1335//1335 1339//1340 1338//1339 +f 1336//1336 1340//1338 1339//1340 +f 1341//1341 1345//1342 1344//1343 +f 1342//1344 1346//1345 1341//1341 +f 1343//1346 1347//1347 1342//1344 +f 1344//1343 1348//1348 1343//1346 +f 1345//1342 1349//1349 1348//1348 +f 1346//1345 1350//1350 1345//1342 +f 1347//1347 1351//1351 1346//1345 +f 1348//1348 1352//1352 1347//1347 +f 1349//1349 1353//1353 1356//1354 +f 1350//1350 1354//1355 1349//1349 +f 1351//1351 1355//1356 1354//1355 +f 1352//1352 1356//1354 1351//1351 +f 1353//1353 1357//1357 1356//1354 +f 1354//1355 1358//1358 1357//1357 +f 1355//1356 1359//1359 1354//1355 +f 1356//1354 1360//1360 1359//1359 +f 1357//1357 1361//1361 1364//1362 +f 1358//1358 1362//1363 1361//1361 +f 1359//1359 1363//1364 1362//1363 +f 1360//1360 1364//1362 1363//1364 +f 1361//1361 1365//1365 1368//1366 +f 1362//1363 1366//1367 1365//1365 +f 1363//1364 1367//1368 1366//1367 +f 1364//1362 1368//1366 1367//1368 +f 1365//1365 1369//1369 1368//1366 +f 1366//1367 1370//1370 1369//1369 +f 1367//1368 1371//1371 1366//1367 +f 1368//1366 1372//1372 1371//1371 +f 1369//1369 1373//1373 1372//1372 +f 1370//1370 1374//1374 1369//1369 +f 1371//1371 1375//1375 1370//1370 +f 1372//1372 1376//1376 1371//1371 +f 1373//1373 1377//1377 1380//1378 +f 1374//1374 1378//1379 1377//1377 +f 1375//1375 1379//1380 1378//1379 +f 1376//1376 1380//1378 1379//1380 +f 1377//1377 1381//1381 1384//1382 +f 1378//1379 1382//1383 1381//1381 +f 1379//1380 1383//1384 1382//1383 +f 1380//1378 1384//1382 1383//1384 +f 1385//1385 1389//1386 1392//1387 +f 1386//1388 1390//1389 1389//1386 +f 1387//1390 1391//1391 1390//1389 +f 1388//1392 1392//1387 1391//1391 +f 1389//1386 1393//1393 1392//1387 +f 1390//1389 1394//1394 1389//1386 +f 1391//1391 1395//1395 1390//1389 +f 1392//1387 1396//1396 1391//1391 +f 1393//1393 1397//1397 1396//1396 +f 1394//1394 1398//1398 1393//1393 +f 1395//1395 1399//1399 1394//1394 +f 1396//1396 1400//1400 1395//1395 +f 1397//1397 1401//1401 1400//1400 +f 1398//1398 1402//1402 1401//1401 +f 1399//1399 1403//1403 1398//1398 +f 1400//1400 1404//1404 1403//1403 +f 1401//1401 1405//1405 1408//1406 +f 1402//1402 1406//1407 1401//1401 +f 1403//1403 1407//1408 1406//1407 +f 1404//1404 1408//1406 1403//1403 +f 1405//1405 1409//1409 1408//1406 +f 1406//1407 1410//1410 1405//1405 +f 1407//1408 1411//1411 1406//1407 +f 1408//1406 1412//1412 1407//1408 +f 1409//1409 1413//1413 1416//1414 +f 1410//1410 1414//1415 1413//1413 +f 1411//1411 1415//1416 1414//1415 +f 1412//1412 1416//1414 1415//1416 +f 1413//1413 1417//1417 1416//1414 +f 1414//1415 1418//1418 1413//1413 +f 1415//1416 1419//1419 1414//1415 +f 1416//1414 1420//1420 1415//1416 +f 1417//1417 1421//1421 1420//1420 +f 1418//1418 1422//1422 1421//1421 +f 1419//1419 1423//1423 1418//1418 +f 1420//1420 1424//1424 1423//1423 +f 1421//1421 1425//1425 1428//1426 +f 1422//1422 1426//1427 1425//1425 +f 1423//1423 1427//1428 1426//1427 +f 1424//1424 1428//1426 1427//1428 +f 1429//1429 1433//1430 1432//1431 +f 1430//1432 1434//1433 1429//1429 +f 1431//1434 1435//1435 1430//1432 +f 1432//1431 1436//1436 1431//1434 +f 1433//1430 1437//1437 1440//1438 +f 1434//1433 1438//1439 1437//1437 +f 1435//1435 1439//1440 1438//1439 +f 1436//1436 1440//1438 1439//1440 +f 1437//1437 1441//1441 1444//1442 +f 1438//1439 1442//1443 1441//1441 +f 1439//1440 1443//1444 1442//1443 +f 1440//1438 1444//1442 1443//1444 +f 1441//1441 1445//1445 1448//1446 +f 1442//1443 1446//1447 1445//1445 +f 1443//1444 1447//1448 1446//1447 +f 1444//1442 1448//1446 1447//1448 +f 1445//1445 1449//1449 1448//1446 +f 1446//1447 1450//1450 1445//1445 +f 1447//1448 1451//1451 1446//1447 +f 1448//1446 1452//1452 1447//1448 +f 1449//1449 1453//1453 1452//1452 +f 1450//1450 1454//1454 1449//1449 +f 1451//1451 1455//1455 1450//1450 +f 1452//1452 1456//1456 1451//1451 +f 1453//1453 1457//1457 1460//1458 +f 1454//1454 1458//1459 1457//1457 +f 1455//1455 1459//1460 1458//1459 +f 1456//1456 1460//1458 1459//1460 +f 1457//1457 1461//1461 1460//1458 +f 1458//1459 1462//1462 1457//1457 +f 1459//1460 1463//1463 1458//1459 +f 1460//1458 1464//1464 1459//1460 +f 1461//1461 1465//1465 1468//1466 +f 1462//1462 1466//1467 1465//1465 +f 1463//1463 1467//1468 1466//1467 +f 1464//1464 1468//1466 1467//1468 +f 1465//1465 1469//1469 1472//1470 +f 1466//1467 1470//1471 1469//1469 +f 1467//1468 1471//1472 1470//1471 +f 1468//1466 1472//1470 1471//1472 +f 1473//1473 1477//1474 1476//1475 +f 1474//1476 1478//1477 1473//1473 +f 1475//1478 1479//1479 1474//1476 +f 1476//1475 1480//1480 1475//1478 +f 1477//1474 1481//1481 1480//1480 +f 1478//1477 1482//1482 1477//1474 +f 1479//1479 1483//1483 1478//1477 +f 1480//1480 1484//1484 1479//1479 +f 1481//1481 1485//1485 1488//1486 +f 1482//1482 1486//1487 1485//1485 +f 1483//1483 1487//1488 1486//1487 +f 1484//1484 1488//1486 1487//1488 +f 1485//1485 1489//1489 1488//1486 +f 1486//1487 1490//1490 1489//1489 +f 1487//1488 1491//1491 1486//1487 +f 1488//1486 1492//1492 1491//1491 +f 1489//1489 1493//1493 1496//1494 +f 1490//1490 1494//1495 1489//1489 +f 1491//1491 1495//1496 1494//1495 +f 1492//1492 1496//1494 1491//1491 +f 1493//1493 1497//1497 1500//1498 +f 1494//1495 1498//1499 1493//1493 +f 1495//1496 1499//1500 1498//1499 +f 1496//1494 1500//1498 1495//1496 +f 1497//1497 1501//1501 1500//1498 +f 1498//1499 1502//1502 1501//1501 +f 1499//1500 1503//1503 1498//1499 +f 1500//1498 1504//1504 1503//1503 +f 1501//1501 1505//1505 1508//1506 +f 1502//1502 1506//1507 1501//1501 +f 1503//1503 1507//1508 1506//1507 +f 1504//1504 1508//1506 1503//1503 +f 1505//1505 1509//1509 1508//1506 +f 1506//1507 1510//1510 1509//1509 +f 1507//1508 1511//1511 1506//1507 +f 1508//1506 1512//1512 1511//1511 +f 1509//1509 1513//1513 1516//1514 +f 1510//1510 1514//1515 1513//1513 +f 1511//1511 1515//1516 1514//1515 +f 1512//1512 1516//1514 1515//1516 +f 1517//1517 1521//1518 1520//1519 +f 1518//1520 1522//1521 1521//1518 +f 1519//1522 1523//1523 1518//1520 +f 1520//1519 1524//1524 1523//1523 +f 1521//1518 1525//1525 1528//1526 +f 1522//1521 1526//1527 1521//1518 +f 1523//1523 1527//1528 1526//1527 +f 1524//1524 1528//1526 1523//1523 +f 1525//1525 1529//1529 1532//1530 +f 1526//1527 1530//1531 1529//1529 +f 1527//1528 1531//1532 1530//1531 +f 1528//1526 1532//1530 1531//1532 +f 1529//1529 1533//1533 1536//1534 +f 1530//1531 1534//1535 1529//1529 +f 1531//1532 1535//1536 1534//1535 +f 1532//1530 1536//1534 1531//1532 +f 1533//1533 1537//1537 1536//1534 +f 1534//1535 1538//1538 1533//1533 +f 1535//1536 1539//1539 1534//1535 +f 1536//1534 1540//1540 1535//1536 +f 1537//1537 1541//1541 1540//1540 +f 1538//1538 1542//1542 1541//1541 +f 1539//1539 1543//1543 1538//1538 +f 1540//1540 1544//1544 1543//1543 +f 1541//1541 1545//1545 1544//1544 +f 1542//1542 1546//1546 1545//1545 +f 1543//1543 1547//1547 1542//1542 +f 1544//1544 1548//1548 1547//1547 +f 1545//1545 1549//1549 1552//1550 +f 1546//1546 1550//1551 1545//1545 +f 1547//1547 1551//1552 1550//1551 +f 1548//1548 1552//1550 1547//1547 +f 1549//1549 1553//1553 1552//1550 +f 1550//1551 1554//1554 1553//1553 +f 1551//1552 1555//1555 1550//1551 +f 1552//1550 1556//1556 1555//1555 +f 1553//1553 1557//1557 1560//1558 +f 1554//1554 1558//1559 1557//1557 +f 1555//1555 1559//1560 1558//1559 +f 1556//1556 1560//1558 1559//1560 +f 1561//1561 1565//1562 1568//1563 +f 1562//1564 1566//1565 1565//1562 +f 1563//1566 1567//1567 1566//1565 +f 1564//1568 1568//1563 1567//1567 +f 1565//1562 1569//1569 1568//1563 +f 1566//1565 1570//1570 1565//1562 +f 1567//1567 1571//1571 1566//1565 +f 1568//1563 1572//1572 1567//1567 +f 1569//1569 1573//1573 1576//1574 +f 1570//1570 1574//1575 1573//1573 +f 1571//1571 1575//1576 1574//1575 +f 1572//1572 1576//1574 1575//1576 +f 1573//1573 1577//1577 1576//1574 +f 1574//1575 1578//1578 1577//1577 +f 1575//1576 1579//1579 1574//1575 +f 1576//1574 1580//1580 1579//1579 +f 1577//1577 1581//1581 1580//1580 +f 1578//1578 1582//1582 1577//1577 +f 1579//1579 1583//1583 1578//1578 +f 1580//1580 1584//1584 1579//1579 +f 1581//1581 1585//1585 1588//1586 +f 1582//1582 1586//1587 1585//1585 +f 1583//1583 1587//1588 1586//1587 +f 1584//1584 1588//1586 1587//1588 +f 1585//1585 1589//1589 1592//1590 +f 1586//1587 1590//1591 1585//1585 +f 1587//1588 1591//1592 1590//1591 +f 1588//1586 1592//1590 1587//1588 +f 1589//1589 1593//1593 1592//1590 +f 1590//1591 1594//1594 1593//1593 +f 1591//1592 1595//1595 1590//1591 +f 1592//1590 1596//1596 1595//1595 +f 1593//1593 1597//1597 1600//1598 +f 1594//1594 1598//1599 1597//1597 +f 1595//1595 1599//1600 1598//1599 +f 1596//1596 1600//1598 1599//1600 +f 1597//1597 1601//1601 1604//1602 +f 1598//1599 1602//1603 1601//1601 +f 1599//1600 1603//1604 1602//1603 +f 1600//1598 1604//1602 1603//1604 +f 1605//1605 1609//1606 1612//1607 +f 1606//1608 1610//1609 1605//1605 +f 1607//1610 1611//1611 1610//1609 +f 1608//1612 1612//1607 1607//1610 +f 1609//1606 1613//1613 1616//1614 +f 1610//1609 1614//1615 1613//1613 +f 1611//1611 1615//1616 1614//1615 +f 1612//1607 1616//1614 1615//1616 +f 1613//1613 1617//1617 1620//1618 +f 1614//1615 1618//1619 1613//1613 +f 1615//1616 1619//1620 1618//1619 +f 1616//1614 1620//1618 1615//1616 +f 1617//1617 1621//1621 1620//1618 +f 1618//1619 1622//1622 1621//1621 +f 1619//1620 1623//1623 1618//1619 +f 1620//1618 1624//1624 1623//1623 +f 1621//1621 1625//1625 1624//1624 +f 1622//1622 1626//1626 1625//1625 +f 1623//1623 1627//1627 1622//1622 +f 1624//1624 1628//1628 1627//1627 +f 1625//1625 1629//1629 1628//1628 +f 1626//1626 1630//1630 1625//1625 +f 1627//1627 1631//1631 1626//1626 +f 1628//1628 1632//1632 1627//1627 +f 1629//1629 1633//1633 1636//1634 +f 1630//1630 1634//1635 1629//1629 +f 1631//1631 1635//1636 1634//1635 +f 1632//1632 1636//1634 1631//1631 +f 1633//1633 1637//1637 1636//1634 +f 1634//1635 1638//1638 1633//1633 +f 1635//1636 1639//1639 1634//1635 +f 1636//1634 1640//1640 1635//1636 +f 1637//1637 1641//1641 1644//1642 +f 1638//1638 1642//1643 1641//1641 +f 1639//1639 1643//1644 1642//1643 +f 1640//1640 1644//1642 1643//1644 +f 1641//1641 1645//1645 1648//1646 +f 1642//1643 1646//1647 1645//1645 +f 1643//1644 1647//1648 1646//1647 +f 1644//1642 1648//1646 1647//1648 +f 1649//1649 1653//1650 1656//1651 +f 1650//1652 1654//1653 1649//1649 +f 1651//1654 1655//1655 1654//1653 +f 1652//1656 1656//1651 1651//1654 +f 1653//1650 1657//1657 1656//1651 +f 1654//1653 1658//1658 1657//1657 +f 1655//1655 1659//1659 1654//1653 +f 1656//1651 1660//1660 1659//1659 +f 1657//1657 1661//1661 1664//1662 +f 1658//1658 1662//1663 1657//1657 +f 1659//1659 1663//1664 1662//1663 +f 1660//1660 1664//1662 1659//1659 +f 1661//1661 1665//1665 1664//1662 +f 1662//1663 1666//1666 1661//1661 +f 1663//1664 1667//1667 1662//1663 +f 1664//1662 1668//1668 1663//1664 +f 1665//1665 1669//1669 1668//1668 +f 1666//1666 1670//1670 1669//1669 +f 1667//1667 1671//1671 1666//1666 +f 1668//1668 1672//1672 1671//1671 +f 1669//1669 1673//1673 1676//1674 +f 1670//1670 1674//1675 1673//1673 +f 1671//1671 1675//1676 1674//1675 +f 1672//1672 1676//1674 1675//1676 +f 1673//1673 1677//1677 1676//1674 +f 1674//1675 1678//1678 1677//1677 +f 1675//1676 1679//1679 1674//1675 +f 1676//1674 1680//1680 1679//1679 +f 1677//1677 1681//1681 1680//1680 +f 1678//1678 1682//1682 1677//1677 +f 1679//1679 1683//1683 1678//1678 +f 1680//1680 1684//1684 1679//1679 +f 1681//1681 1685//1685 1688//1686 +f 1682//1682 1686//1687 1681//1681 +f 1683//1683 1687//1688 1686//1687 +f 1684//1684 1688//1686 1683//1683 +f 1685//1685 1689//1689 1692//1690 +f 1686//1687 1690//1691 1689//1689 +f 1687//1688 1691//1692 1690//1691 +f 1688//1686 1692//1690 1691//1692 +f 1693//1693 1697//1694 1700//1695 +f 1694//1696 1698//1697 1693//1693 +f 1695//1698 1699//1699 1698//1697 +f 1696//1700 1700//1695 1695//1698 +f 1697//1694 1701//1701 1700//1695 +f 1698//1697 1702//1702 1701//1701 +f 1699//1699 1703//1703 1698//1697 +f 1700//1695 1704//1704 1703//1703 +f 1701//1701 1705//1705 1708//1706 +f 1702//1702 1706//1707 1705//1705 +f 1703//1703 1707//1708 1706//1707 +f 1704//1704 1708//1706 1707//1708 +f 1705//1705 1709//1709 1708//1706 +f 1706//1707 1710//1710 1705//1705 +f 1707//1708 1711//1711 1706//1707 +f 1708//1706 1712//1712 1707//1708 +f 1709//1709 1713//1713 1716//1714 +f 1710//1710 1714//1715 1709//1709 +f 1711//1711 1715//1716 1714//1715 +f 1712//1712 1716//1714 1711//1711 +f 1713//1713 1717//1717 1716//1714 +f 1714//1715 1718//1718 1717//1717 +f 1715//1716 1719//1719 1718//1718 +f 1716//1714 1720//1720 1719//1719 +f 1717//1717 1721//1721 1724//1722 +f 1718//1718 1722//1723 1717//1717 +f 1719//1719 1723//1724 1722//1723 +f 1720//1720 1724//1722 1719//1719 +f 1721//1721 1725//1725 1724//1722 +f 1722//1723 1726//1726 1725//1725 +f 1723//1724 1727//1727 1722//1723 +f 1724//1722 1728//1728 1727//1727 +f 1725//1725 1729//1729 1732//1730 +f 1726//1726 1730//1731 1729//1729 +f 1727//1727 1731//1732 1730//1731 +f 1728//1728 1732//1730 1731//1732 +f 1729//1729 1733//1733 1736//1734 +f 1730//1731 1734//1735 1733//1733 +f 1731//1732 1735//1736 1734//1735 +f 1732//1730 1736//1734 1735//1736 +f 1737//1737 1741//1738 1740//1739 +f 1738//1740 1742//1741 1741//1738 +f 1739//1742 1743//1743 1738//1740 +f 1740//1739 1744//1744 1743//1743 +f 1741//1738 1745//1745 1748//1746 +f 1742//1741 1746//1747 1741//1738 +f 1743//1743 1747//1748 1746//1747 +f 1744//1744 1748//1746 1743//1743 +f 1745//1745 1749//1749 1748//1746 +f 1746//1747 1750//1750 1749//1749 +f 1747//1748 1751//1751 1746//1747 +f 1748//1746 1752//1752 1751//1751 +f 1749//1749 1753//1753 1752//1752 +f 1750//1750 1754//1754 1749//1749 +f 1751//1751 1755//1755 1750//1750 +f 1752//1752 1756//1756 1751//1751 +f 1753//1753 1757//1757 1760//1758 +f 1754//1754 1758//1759 1753//1753 +f 1755//1755 1759//1760 1758//1759 +f 1756//1756 1760//1758 1755//1755 +f 1757//1757 1761//1761 1764//1762 +f 1758//1759 1762//1763 1761//1761 +f 1759//1760 1763//1764 1762//1763 +f 1760//1758 1764//1762 1763//1764 +f 1761//1761 1765//1765 1764//1762 +f 1762//1763 1766//1766 1761//1761 +f 1763//1764 1767//1767 1762//1763 +f 1764//1762 1768//1768 1763//1764 +f 1765//1765 1769//1769 1768//1768 +f 1766//1766 1770//1770 1769//1769 +f 1767//1767 1771//1771 1766//1766 +f 1768//1768 1772//1772 1771//1771 +f 1769//1769 1773//1773 1772//1772 +f 1770//1770 1774//1774 1769//1769 +f 1771//1771 1775//1775 1770//1770 +f 1772//1772 1776//1776 1771//1771 +f 1773//1773 1777//1777 1780//1778 +f 1774//1774 1778//1779 1777//1777 +f 1775//1775 1779//1780 1778//1779 +f 1776//1776 1780//1778 1779//1780 +f 1781//1781 1785//1782 1788//1783 +f 1782//1784 1786//1785 1785//1782 +f 1783//1786 1787//1787 1786//1785 +f 1784//1788 1788//1783 1787//1787 +f 1785//1782 1789//1789 1788//1783 +f 1786//1785 1790//1790 1785//1782 +f 1787//1787 1791//1791 1786//1785 +f 1788//1783 1792//1792 1787//1787 +f 1789//1789 1793//1793 1792//1792 +f 1790//1790 1794//1794 1793//1793 +f 1791//1791 1795//1795 1790//1790 +f 1792//1792 1796//1796 1795//1795 +f 1793//1793 1797//1797 1800//1798 +f 1794//1794 1798//1799 1797//1797 +f 1795//1795 1799//1800 1798//1799 +f 1796//1796 1800//1798 1799//1800 +f 1797//1797 1801//1801 1800//1798 +f 1798//1799 1802//1802 1801//1801 +f 1799//1800 1803//1803 1798//1799 +f 1800//1798 1804//1804 1803//1803 +f 1801//1801 1805//1805 1804//1804 +f 1802//1802 1806//1806 1801//1801 +f 1803//1803 1807//1807 1802//1802 +f 1804//1804 1808//1808 1803//1803 +f 1805//1805 1809//1809 1812//1810 +f 1806//1806 1810//1811 1809//1809 +f 1807//1807 1811//1812 1810//1811 +f 1808//1808 1812//1810 1811//1812 +f 1809//1809 1813//1813 1812//1810 +f 1810//1811 1814//1814 1809//1809 +f 1811//1812 1815//1815 1810//1811 +f 1812//1810 1816//1816 1811//1812 +f 1813//1813 1817//1817 1820//1818 +f 1814//1814 1818//1819 1817//1817 +f 1815//1815 1819//1820 1818//1819 +f 1816//1816 1820//1818 1819//1820 +f 1817//1817 1821//1821 1824//1822 +f 1818//1819 1822//1823 1821//1821 +f 1819//1820 1823//1824 1822//1823 +f 1820//1818 1824//1822 1823//1824 +f 1825//1825 1829//1826 1828//1827 +f 1826//1828 1830//1829 1829//1826 +f 1827//1830 1831//1831 1826//1828 +f 1828//1827 1832//1832 1831//1831 +f 1829//1826 1833//1833 1836//1834 +f 1830//1829 1834//1835 1829//1826 +f 1831//1831 1835//1836 1834//1835 +f 1832//1832 1836//1834 1831//1831 +f 1833//1833 1837//1837 1840//1838 +f 1834//1835 1838//1839 1833//1833 +f 1835//1836 1839//1840 1838//1839 +f 1836//1834 1840//1838 1835//1836 +f 1837//1837 1841//1841 1840//1838 +f 1838//1839 1842//1842 1841//1841 +f 1839//1840 1843//1843 1838//1839 +f 1840//1838 1844//1844 1843//1843 +f 1841//1841 1845//1845 1848//1846 +f 1842//1842 1846//1847 1841//1841 +f 1843//1843 1847//1848 1846//1847 +f 1844//1844 1848//1846 1843//1843 +f 1845//1845 1849//1849 1852//1850 +f 1846//1847 1850//1851 1845//1845 +f 1847//1848 1851//1852 1850//1851 +f 1848//1846 1852//1850 1847//1848 +f 1849//1849 1853//1853 1856//1854 +f 1850//1851 1854//1855 1853//1853 +f 1851//1852 1855//1856 1854//1855 +f 1852//1850 1856//1854 1855//1856 +f 1857//1857 1861//1858 1860//1859 +f 1858//1860 1862//1861 1857//1857 +f 1859//1862 1863//1863 1858//1860 +f 1860//1859 1864//1864 1859//1862 +f 1861//1858 1865//1865 1868//1866 +f 1862//1861 1866//1867 1865//1865 +f 1863//1863 1867//1868 1866//1867 +f 1864//1864 1868//1866 1867//1868 +f 1865//1865 1869//1869 1872//1870 +f 1866//1867 1870//1871 1865//1865 +f 1867//1868 1871//1872 1870//1871 +f 1868//1866 1872//1870 1867//1868 +f 1869//1869 1873//1873 1876//1874 +f 1870//1871 1874//1875 1873//1873 +f 1871//1872 1875//1876 1874//1875 +f 1872//1870 1876//1874 1875//1876 +f 1877//1877 1881//1878 1884//1879 +f 1878//1880 1882//1881 1881//1878 +f 1879//1882 1883//1883 1882//1881 +f 1880//1884 1884//1879 1883//1883 +f 1881//1878 1885//1885 1888//1886 +f 1882//1881 1886//1887 1885//1885 +f 1883//1883 1887//1888 1886//1887 +f 1884//1879 1888//1886 1887//1888 +f 1889//1889 1893//1890 1896//1891 +f 1890//1892 1894//1893 1893//1890 +f 1891//1894 1895//1895 1894//1893 +f 1892//1896 1896//1891 1895//1895 +f 1897//1897 1901//1898 1904//1899 +f 1898//1900 1902//1901 1901//1898 +f 1899//1902 1903//1903 1902//1901 +f 1900//1904 1904//1899 1903//1903 +f 1901//1898 1905//1905 1904//1899 +f 1902//1901 1906//1906 1901//1898 +f 1903//1903 1907//1907 1902//1901 +f 1904//1899 1908//1908 1903//1903 +f 1905//1905 1909//1909 1908//1908 +f 1906//1906 1910//1910 1905//1905 +f 1907//1907 1911//1911 1906//1906 +f 1908//1908 1912//1912 1907//1907 +f 1909//1909 1913//1913 1912//1912 +f 1910//1910 1914//1914 1909//1909 +f 1911//1911 1915//1915 1910//1910 +f 1912//1912 1916//1916 1911//1911 +f 1913//1913 1917//1917 1916//1916 +f 1914//1914 1918//1918 1913//1913 +f 1915//1915 1919//1919 1914//1914 +f 1916//1916 1920//1920 1915//1915 +f 1917//1917 1921//1921 1924//1922 +f 1918//1918 1922//1923 1921//1921 +f 1919//1919 1923//1924 1922//1923 +f 1920//1920 1924//1922 1923//1924 +f 1925//1925 1929//1926 1928//1927 +f 1926//1928 1930//1929 1925//1925 +f 1927//1930 1931//1931 1930//1929 +f 1928//1927 1932//1932 1927//1930 +f 1929//1926 1933//1933 1932//1932 +f 1930//1929 1934//1934 1933//1933 +f 1931//1931 1935//1935 1930//1929 +f 1932//1932 1936//1936 1935//1935 +f 1933//1933 1937//1937 1940//1938 +f 1934//1934 1938//1939 1937//1937 +f 1935//1935 1939//1940 1938//1939 +f 1936//1936 1940//1938 1939//1940 +f 1941//1941 1945//1942 1948//1943 +f 1942//1944 1946//1945 1945//1942 +f 1943//1946 1947//1947 1946//1945 +f 1944//1948 1948//1943 1947//1947 +f 1949//1949 1953//1950 1952//1951 +f 1950//1952 1954//1953 1949//1949 +f 1951//1954 1955//1955 1950//1952 +f 1952//1951 1956//1956 1951//1954 +f 1953//1950 1957//1957 1960//1958 +f 1954//1953 1958//1959 1957//1957 +f 1955//1955 1959//1960 1958//1959 +f 1956//1956 1960//1958 1959//1960 +f 1957//1957 1961//1961 1964//1962 +f 1958//1959 1962//1963 1961//1961 +f 1959//1960 1963//1964 1962//1963 +f 1960//1958 1964//1962 1963//1964 +f 1961//1961 1965//1965 1968//1966 +f 1962//1963 1966//1967 1965//1965 +f 1963//1964 1967//1968 1966//1967 +f 1964//1962 1968//1966 1967//1968 +f 1965//1965 1969//1969 1968//1966 +f 1966//1967 1970//1970 1965//1965 +f 1967//1968 1971//1971 1966//1967 +f 1968//1966 1972//1972 1967//1968 +f 1969//1969 1973//1973 1976//1974 +f 1970//1970 1974//1975 1973//1973 +f 1971//1971 1975//1976 1974//1975 +f 1972//1972 1976//1974 1975//1976 +f 1973//1973 1977//1977 1980//1978 +f 1974//1975 1978//1979 1977//1977 +f 1975//1976 1979//1980 1978//1979 +f 1976//1974 1980//1978 1979//1980 +f 1981//1981 1985//1982 1988//1983 +f 1982//1984 1986//1985 1985//1982 +f 1983//1986 1987//1987 1986//1985 +f 1984//1988 1988//1983 1987//1987 +f 1985//1982 1989//1989 1988//1983 +f 1986//1985 1990//1990 1985//1982 +f 1987//1987 1991//1991 1986//1985 +f 1988//1983 1992//1992 1987//1987 +f 1989//1989 1993//1993 1992//1992 +f 1990//1990 1994//1994 1993//1993 +f 1991//1991 1995//1995 1990//1990 +f 1992//1992 1996//1996 1995//1995 +f 1993//1993 1997//1997 2000//1998 +f 1994//1994 1998//1999 1997//1997 +f 1995//1995 1999//2000 1998//1999 +f 1996//1996 2000//1998 1999//2000 +f 2001//2001 2005//2002 2008//2003 +f 2002//2004 2006//2005 2005//2002 +f 2003//2006 2007//2007 2006//2005 +f 2004//2008 2008//2003 2007//2007 +f 2005//2002 2009//2009 2012//2010 +f 2006//2005 2010//2011 2009//2009 +f 2007//2007 2011//2012 2010//2011 +f 2008//2003 2012//2010 2011//2012 +f 2013//2013 2017//2014 2020//2015 +f 2014//2016 2018//2017 2017//2014 +f 2015//2018 2019//2019 2018//2017 +f 2016//2020 2020//2015 2019//2019 +f 2021//2021 2025//2022 2028//2023 +f 2022//2024 2026//2025 2021//2021 +f 2023//2026 2027//2027 2026//2025 +f 2024//2028 2028//2023 2023//2026 +f 2025//2022 2029//2029 2028//2023 +f 2026//2025 2030//2030 2029//2029 +f 2027//2027 2031//2031 2026//2025 +f 2028//2023 2032//2032 2031//2031 +f 2029//2029 2033//2033 2032//2032 +f 2030//2030 2034//2034 2033//2033 +f 2031//2031 2035//2035 2030//2030 +f 2032//2032 2036//2036 2035//2035 +f 2033//2033 2037//2037 2040//2038 +f 2034//2034 2038//2039 2033//2033 +f 2035//2035 2039//2040 2038//2039 +f 2036//2036 2040//2038 2035//2035 +f 2037//2037 2041//2041 2044//2042 +f 2038//2039 2042//2043 2037//2037 +f 2039//2040 2043//2044 2042//2043 +f 2040//2038 2044//2042 2039//2040 +f 2041//2041 2045//2045 2048//2046 +f 2042//2043 2046//2047 2045//2045 +f 2043//2044 2047//2048 2046//2047 +f 2044//2042 2048//2046 2047//2048 +f 2049//2049 2053//2050 2056//2051 +f 2050//2052 2054//2053 2053//2050 +f 2051//2054 2055//2055 2054//2053 +f 2052//2056 2056//2051 2055//2055 +f 2053//2050 2057//2057 2056//2051 +f 2054//2053 2058//2058 2053//2050 +f 2055//2055 2059//2059 2054//2053 +f 2056//2051 2060//2060 2055//2055 +f 2057//2057 2061//2061 2064//2062 +f 2058//2058 2062//2063 2061//2061 +f 2059//2059 2063//2064 2062//2063 +f 2060//2060 2064//2062 2063//2064 +f 2065//2065 2069//2066 2072//2067 +f 2066//2068 2070//2069 2069//2066 +f 2067//2070 2071//2071 2070//2069 +f 2068//2072 2072//2067 2071//2071 +f 2073//2073 2077//2074 2080//2075 +f 2074//2076 2078//2077 2077//2074 +f 2075//2078 2079//2079 2078//2077 +f 2076//2080 2080//2075 2079//2079 +f 2077//2074 2081//2081 2080//2075 +f 2078//2077 2082//2082 2077//2074 +f 2079//2079 2083//2083 2078//2077 +f 2080//2075 2084//2084 2079//2079 +f 2081//2081 2085//2085 2088//2086 +f 2082//2082 2086//2087 2081//2081 +f 2083//2083 2087//2088 2086//2087 +f 2084//2084 2088//2086 2083//2083 +f 2085//2085 2089//2089 2088//2086 +f 2086//2087 2090//2090 2089//2089 +f 2087//2088 2091//2091 2086//2087 +f 2088//2086 2092//2092 2091//2091 +f 2089//2089 2093//2093 2092//2092 +f 2090//2090 2094//2094 2093//2093 +f 2091//2091 2095//2095 2090//2090 +f 2092//2092 2096//2096 2095//2095 +f 2093//2093 2097//2097 2100//2098 +f 2094//2094 2098//2099 2093//2093 +f 2095//2095 2099//2100 2098//2099 +f 2096//2096 2100//2098 2095//2095 +f 2097//2097 2101//2101 2104//2102 +f 2098//2099 2102//2103 2101//2101 +f 2099//2100 2103//2104 2102//2103 +f 2100//2098 2104//2102 2103//2104 +f 2105//2105 2109//2106 2112//2107 +f 2106//2108 2110//2109 2109//2106 +f 2107//2110 2111//2111 2110//2109 +f 2108//2112 2112//2107 2111//2111 +f 2109//2106 2113//2113 2112//2107 +f 2110//2109 2114//2114 2109//2106 +f 2111//2111 2115//2115 2110//2109 +f 2112//2107 2116//2116 2111//2111 +f 2113//2113 2117//2117 2116//2116 +f 2114//2114 2118//2118 2113//2113 +f 2115//2115 2119//2119 2114//2114 +f 2116//2116 2120//2120 2115//2115 +f 2117//2117 2121//2121 2124//2122 +f 2118//2118 2122//2123 2121//2121 +f 2119//2119 2123//2124 2122//2123 +f 2120//2120 2124//2122 2123//2124 +f 2125//2125 2129//2126 2128//2127 +f 2126//2128 2130//2129 2129//2126 +f 2127//2130 2131//2131 2126//2128 +f 2128//2127 2132//2132 2131//2131 +f 2129//2126 2133//2133 2136//2134 +f 2130//2129 2134//2135 2133//2133 +f 2131//2131 2135//2136 2134//2135 +f 2132//2132 2136//2134 2135//2136 +f 2137//2137 2141//2138 2144//2139 +f 2138//2140 2142//2141 2141//2138 +f 2139//2142 2143//2143 2142//2141 +f 2140//2144 2144//2139 2143//2143 +f 2145//2145 2149//2146 2148//2147 +f 2146//2148 2150//2149 2145//2145 +f 2147//2150 2151//2151 2146//2148 +f 2148//2147 2152//2152 2147//2150 +f 2149//2146 2153//2153 2152//2152 +f 2150//2149 2154//2154 2149//2146 +f 2151//2151 2155//2155 2150//2149 +f 2152//2152 2156//2156 2151//2151 +f 2153//2153 2157//2157 2160//2158 +f 2154//2154 2158//2159 2157//2157 +f 2155//2155 2159//2160 2158//2159 +f 2156//2156 2160//2158 2159//2160 +f 2157//2157 2161//2161 2160//2158 +f 2158//2159 2162//2162 2157//2157 +f 2159//2160 2163//2163 2158//2159 +f 2160//2158 2164//2164 2159//2160 +f 2161//2161 2165//2165 2168//2166 +f 2162//2162 2166//2167 2165//2165 +f 2163//2163 2167//2168 2166//2167 +f 2164//2164 2168//2166 2167//2168 +f 2165//2165 2169//2169 2172//2170 +f 2166//2167 2170//2171 2169//2169 +f 2167//2168 2171//2172 2170//2171 +f 2168//2166 2172//2170 2171//2172 +f 2173//2173 2177//2174 2180//2175 +f 2174//2176 2178//2177 2177//2174 +f 2175//2178 2179//2179 2178//2177 +f 2176//2180 2180//2175 2179//2179 +f 2177//2174 2181//2181 2180//2175 +f 2178//2177 2182//2182 2177//2174 +f 2179//2179 2183//2183 2178//2177 +f 2180//2175 2184//2184 2179//2179 +f 2181//2181 2185//2185 2188//2186 +f 2182//2182 2186//2187 2185//2185 +f 2183//2183 2187//2188 2186//2187 +f 2184//2184 2188//2186 2187//2188 +f 2189//2189 2193//2190 2196//2191 +f 2190//2192 2194//2193 2193//2190 +f 2191//2194 2195//2195 2194//2193 +f 2192//2196 2196//2191 2195//2195 +f 2197//2197 2201//2198 2200//2199 +f 2198//2200 2202//2201 2197//2197 +f 2199//2202 2203//2203 2198//2200 +f 2200//2199 2204//2204 2199//2202 +f 2201//2198 2205//2205 2208//2206 +f 2202//2201 2206//2207 2205//2205 +f 2203//2203 2207//2208 2206//2207 +f 2204//2204 2208//2206 2207//2208 +f 2205//2205 2209//2209 2208//2206 +f 2206//2207 2210//2210 2205//2205 +f 2207//2208 2211//2211 2206//2207 +f 2208//2206 2212//2212 2207//2208 +f 2209//2209 2213//2213 2212//2212 +f 2210//2210 2214//2214 2209//2209 +f 2211//2211 2215//2215 2210//2210 +f 2212//2212 2216//2216 2211//2211 +f 2213//2213 2217//2217 2220//2218 +f 2214//2214 2218//2219 2217//2217 +f 2215//2215 2219//2220 2218//2219 +f 2216//2216 2220//2218 2219//2220 +f 2217//2217 2221//2221 2220//2218 +f 2218//2219 2222//2222 2217//2217 +f 2219//2220 2223//2223 2218//2219 +f 2220//2218 2224//2224 2219//2220 +f 2221//2221 2225//2225 2228//2226 +f 2222//2222 2226//2227 2225//2225 +f 2223//2223 2227//2228 2226//2227 +f 2224//2224 2228//2226 2227//2228 +f 2229//2229 2233//2230 2236//2231 +f 2230//2232 2234//2233 2233//2230 +f 2231//2234 2235//2235 2234//2233 +f 2232//2236 2236//2231 2235//2235 +f 2233//2230 2237//2237 2236//2231 +f 2234//2233 2238//2238 2233//2230 +f 2235//2235 2239//2239 2234//2233 +f 2236//2231 2240//2240 2235//2235 +f 2237//2237 2241//2241 2240//2240 +f 2238//2238 2242//2242 2241//2241 +f 2239//2239 2243//2243 2238//2238 +f 2240//2240 2244//2244 2243//2243 +f 2241//2241 2245//2245 2248//2246 +f 2242//2242 2246//2247 2245//2245 +f 2243//2243 2247//2248 2246//2247 +f 2244//2244 2248//2246 2247//2248 +f 2249//2249 2253//2250 2252//2251 +f 2250//2252 2254//2253 2249//2249 +f 2251//2254 2255//2255 2250//2252 +f 2252//2251 2256//2256 2251//2254 +f 2253//2250 2257//2257 2260//2258 +f 2254//2253 2258//2259 2257//2257 +f 2255//2255 2259//2260 2258//2259 +f 2256//2256 2260//2258 2259//2260 +f 2261//2261 2265//2262 2268//2263 +f 2262//2264 2266//2265 2265//2262 +f 2263//2266 2267//2267 2266//2265 +f 2264//2268 2268//2263 2267//2267 +f 2269//2269 2273//2270 2276//2271 +f 2270//2272 2274//2273 2273//2270 +f 2271//2274 2275//2275 2274//2273 +f 2272//2276 2276//2271 2275//2275 +f 2273//2270 2277//2277 2280//2278 +f 2274//2273 2278//2279 2277//2277 +f 2275//2275 2279//2280 2278//2279 +f 2276//2271 2280//2278 2279//2280 +f 2277//2277 2281//2281 2280//2278 +f 2278//2279 2282//2282 2277//2277 +f 2279//2280 2283//2283 2278//2279 +f 2280//2278 2284//2284 2279//2280 +f 2281//2281 2285//2285 2284//2284 +f 2282//2282 2286//2286 2281//2281 +f 2283//2283 2287//2287 2282//2282 +f 2284//2284 2288//2288 2283//2283 +f 2285//2285 2289//2289 2288//2288 +f 2286//2286 2290//2290 2285//2285 +f 2287//2287 2291//2291 2286//2286 +f 2288//2288 2292//2292 2287//2287 +f 2289//2289 2293//2293 2296//2294 +f 2290//2290 2294//2295 2293//2293 +f 2291//2291 2295//2296 2294//2295 +f 2292//2292 2296//2294 2295//2296 +f 2297//2297 2301//2298 2304//2299 +f 2298//2300 2302//2301 2301//2298 +f 2299//2302 2303//2303 2302//2301 +f 2300//2304 2304//2299 2303//2303 +f 2301//2298 2305//2305 2308//2306 +f 2302//2301 2306//2307 2305//2305 +f 2303//2303 2307//2308 2306//2307 +f 2304//2299 2308//2306 2307//2308 +f 2305//2305 2309//2309 2312//2310 +f 2306//2307 2310//2311 2309//2309 +f 2307//2308 2311//2312 2310//2311 +f 2308//2306 2312//2310 2311//2312 +f 2313//2313 2317//2314 2320//2315 +f 2314//2316 2318//2317 2317//2314 +f 2315//2318 2319//2319 2318//2317 +f 2316//2320 2320//2315 2319//2319 +f 2321//2321 2325//2322 2328//2323 +f 2322//2324 2326//2325 2325//2322 +f 2323//2326 2327//2327 2326//2325 +f 2324//2328 2328//2323 2327//2327 +f 2325//2322 2329//2329 2328//2323 +f 2326//2325 2330//2330 2325//2322 +f 2327//2327 2331//2331 2326//2325 +f 2328//2323 2332//2332 2327//2327 +f 2329//2329 2333//2333 2332//2332 +f 2330//2330 2334//2334 2329//2329 +f 2331//2331 2335//2335 2330//2330 +f 2332//2332 2336//2336 2331//2331 +f 2333//2333 2337//2337 2340//2338 +f 2334//2334 2338//2339 2337//2337 +f 2335//2335 2339//2340 2338//2339 +f 2336//2336 2340//2338 2339//2340 +f 2337//2337 2341//2341 2340//2338 +f 2338//2339 2342//2342 2337//2337 +f 2339//2340 2343//2343 2338//2339 +f 2340//2338 2344//2344 2339//2340 +f 2341//2341 2345//2345 2348//2346 +f 2342//2342 2346//2347 2345//2345 +f 2343//2343 2347//2348 2346//2347 +f 2344//2344 2348//2346 2343//2343 +f 2345//2345 2349//2349 2352//2350 +f 2346//2347 2350//2351 2349//2349 +f 2347//2348 2351//2352 2350//2351 +f 2348//2346 2352//2350 2351//2352 +f 2353//2353 2357//2354 2356//2355 +f 2354//2356 2358//2357 2353//2353 +f 2355//2358 2359//2359 2354//2356 +f 2356//2355 2360//2360 2355//2358 +f 2357//2354 2361//2361 2360//2360 +f 2358//2357 2362//2362 2357//2354 +f 2359//2359 2363//2363 2358//2357 +f 2360//2360 2364//2364 2359//2359 +f 2361//2361 2365//2365 2364//2364 +f 2362//2362 2366//2366 2365//2365 +f 2363//2363 2367//2367 2362//2362 +f 2364//2364 2368//2368 2367//2367 +f 2365//2365 2369//2369 2372//2370 +f 2366//2366 2370//2371 2369//2369 +f 2367//2367 2371//2372 2370//2371 +f 2368//2368 2372//2370 2371//2372 +f 2373//2373 2377//2374 2380//2375 +f 2374//2376 2378//2377 2373//2373 +f 2375//2378 2379//2379 2378//2377 +f 2376//2380 2380//2375 2375//2378 +f 2377//2374 2381//2381 2384//2382 +f 2378//2377 2382//2383 2381//2381 +f 2379//2379 2383//2384 2382//2383 +f 2380//2375 2384//2382 2383//2384 +f 2385//2385 2389//2386 2392//2387 +f 2386//2388 2390//2389 2389//2386 +f 2387//2390 2391//2391 2390//2389 +f 2388//2392 2392//2387 2391//2391 +f 2393//2393 2397//2394 2396//2395 +f 2394//2396 2398//2397 2393//2393 +f 2395//2398 2399//2399 2394//2396 +f 2396//2395 2400//2400 2395//2398 +f 2397//2394 2401//2401 2404//2402 +f 2398//2397 2402//2403 2401//2401 +f 2399//2399 2403//2404 2402//2403 +f 2400//2400 2404//2402 2403//2404 +f 2401//2401 2405//2405 2404//2402 +f 2402//2403 2406//2406 2401//2401 +f 2403//2404 2407//2407 2402//2403 +f 2404//2402 2408//2408 2403//2404 +f 2405//2405 2409//2409 2412//2410 +f 2406//2406 2410//2411 2409//2409 +f 2407//2407 2411//2412 2410//2411 +f 2408//2408 2412//2410 2411//2412 +f 2409//2409 2413//2413 2412//2410 +f 2410//2411 2414//2414 2409//2409 +f 2411//2412 2415//2415 2410//2411 +f 2412//2410 2416//2416 2411//2412 +f 2413//2413 2417//2417 2420//2418 +f 2414//2414 2418//2419 2417//2417 +f 2415//2415 2419//2420 2418//2419 +f 2416//2416 2420//2418 2419//2420 +f 2421//2421 2425//2422 2428//2423 +f 2422//2424 2426//2425 2425//2422 +f 2423//2426 2427//2427 2426//2425 +f 2424//2428 2428//2423 2427//2427 +f 2425//2422 2429//2429 2428//2423 +f 2426//2425 2430//2430 2429//2429 +f 2427//2427 2431//2431 2426//2425 +f 2428//2423 2432//2432 2431//2431 +f 2429//2429 2433//2433 2436//2434 +f 2430//2430 2434//2435 2433//2433 +f 2431//2431 2435//2436 2434//2435 +f 2432//2432 2436//2434 2435//2436 +f 2437//2437 2441//2438 2444//2439 +f 2438//2440 2442//2441 2441//2438 +f 2439//2442 2443//2443 2442//2441 +f 2440//2444 2444//2439 2443//2443 +f 2445//2445 2449//2446 2448//2447 +f 2446//2448 2450//2449 2445//2445 +f 2447//2450 2451//2451 2446//2448 +f 2448//2447 2452//2452 2447//2450 +f 2449//2446 2453//2453 2456//2454 +f 2450//2449 2454//2455 2453//2453 +f 2451//2451 2455//2456 2454//2455 +f 2452//2452 2456//2454 2455//2456 +f 2453//2453 2457//2457 2456//2454 +f 2454//2455 2458//2458 2453//2453 +f 2455//2456 2459//2459 2454//2455 +f 2456//2454 2460//2460 2455//2456 +f 2457//2457 2461//2461 2464//2462 +f 2458//2458 2462//2463 2461//2461 +f 2459//2459 2463//2464 2462//2463 +f 2460//2460 2464//2462 2463//2464 +f 2461//2461 2465//2465 2464//2462 +f 2462//2463 2466//2466 2461//2461 +f 2463//2464 2467//2467 2462//2463 +f 2464//2462 2468//2468 2463//2464 +f 2465//2465 2469//2469 2472//2470 +f 2466//2466 2470//2471 2469//2469 +f 2467//2467 2471//2472 2470//2471 +f 2468//2468 2472//2470 2471//2472 +f 2469//2469 2473//2473 2476//2474 +f 2470//2471 2474//2475 2473//2473 +f 2471//2472 2475//2476 2474//2475 +f 2472//2470 2476//2474 2475//2476 +f 2477//2477 2481//2478 2484//2479 +f 2478//2480 2482//2481 2481//2478 +f 2479//2482 2483//2483 2482//2481 +f 2480//2484 2484//2479 2483//2483 +f 2481//2478 2485//2485 2484//2479 +f 2482//2481 2486//2486 2481//2478 +f 2483//2483 2487//2487 2482//2481 +f 2484//2479 2488//2488 2483//2483 +f 2485//2485 2489//2489 2492//2490 +f 2486//2486 2490//2491 2485//2485 +f 2487//2487 2491//2492 2490//2491 +f 2488//2488 2492//2490 2487//2487 +f 2489//2489 2493//2493 2496//2494 +f 2490//2491 2494//2495 2493//2493 +f 2491//2492 2495//2496 2494//2495 +f 2492//2490 2496//2494 2495//2496 +f 2497//2497 2501//2498 2504//2499 +f 2498//2500 2502//2501 2501//2498 +f 2499//2502 2503//2503 2502//2501 +f 2500//2504 2504//2499 2503//2503 +f 2501//2498 2505//2505 2508//2506 +f 2502//2501 2506//2507 2505//2505 +f 2503//2503 2507//2508 2506//2507 +f 2504//2499 2508//2506 2507//2508 +f 2509//2509 2513//2510 2516//2511 +f 2510//2512 2514//2513 2513//2510 +f 2511//2514 2515//2515 2514//2513 +f 2512//2516 2516//2511 2515//2515 +f 2517//2517 2521//2518 2524//2519 +f 2518//2520 2522//2521 2521//2518 +f 2519//2522 2523//2523 2522//2521 +f 2520//2524 2524//2519 2523//2523 +f 2521//2518 2525//2525 2528//2526 +f 2522//2521 2526//2527 2525//2525 +f 2523//2523 2527//2528 2526//2527 +f 2524//2519 2528//2526 2527//2528 +f 2525//2525 2529//2529 2528//2526 +f 2526//2527 2530//2530 2525//2525 +f 2527//2528 2531//2531 2526//2527 +f 2528//2526 2532//2532 2527//2528 +f 2529//2529 2533//2533 2536//2534 +f 2530//2530 2534//2535 2533//2533 +f 2531//2531 2535//2536 2534//2535 +f 2532//2532 2536//2534 2535//2536 +f 2533//2533 2537//2537 2536//2534 +f 2534//2535 2538//2538 2533//2533 +f 2535//2536 2539//2539 2534//2535 +f 2536//2534 2540//2540 2535//2536 +f 2537//2537 2541//2541 2544//2542 +f 2538//2538 2542//2543 2541//2541 +f 2539//2539 2543//2544 2542//2543 +f 2540//2540 2544//2542 2543//2544 +f 2545//2545 2549//2546 2548//2547 +f 2546//2548 2550//2549 2545//2545 +f 2547//2550 2551//2551 2546//2548 +f 2548//2547 2552//2552 2547//2550 +f 2549//2546 2553//2553 2556//2554 +f 2550//2549 2554//2555 2553//2553 +f 2551//2551 2555//2556 2554//2555 +f 2552//2552 2556//2554 2551//2551 +f 2553//2553 2557//2557 2560//2558 +f 2554//2555 2558//2559 2557//2557 +f 2555//2556 2559//2560 2558//2559 +f 2556//2554 2560//2558 2559//2560 +f 2561//2561 2565//2562 2568//2563 +f 2562//2564 2566//2565 2565//2562 +f 2563//2566 2567//2567 2566//2565 +f 2564//2568 2568//2563 2567//2567 +f 2569//2569 2573//2570 2576//2571 +f 2570//2572 2574//2573 2573//2570 +f 2571//2574 2575//2575 2574//2573 +f 2572//2576 2576//2571 2575//2575 +f 2573//2570 2577//2577 2576//2571 +f 2574//2573 2578//2578 2573//2570 +f 2575//2575 2579//2579 2574//2573 +f 2576//2571 2580//2580 2575//2575 +f 2577//2577 2581//2581 2584//2582 +f 2578//2578 2582//2583 2581//2581 +f 2579//2579 2583//2584 2582//2583 +f 2580//2580 2584//2582 2583//2584 +f 2581//2581 2585//2585 2584//2582 +f 2582//2583 2586//2586 2581//2581 +f 2583//2584 2587//2587 2582//2583 +f 2584//2582 2588//2588 2583//2584 +f 2585//2585 2589//2589 2592//2590 +f 2586//2586 2590//2591 2589//2589 +f 2587//2587 2591//2592 2590//2591 +f 2588//2588 2592//2590 2591//2592 +f 2589//2589 2593//2593 2596//2594 +f 2590//2591 2594//2595 2593//2593 +f 2591//2592 2595//2596 2594//2595 +f 2592//2590 2596//2594 2595//2596 +f 2593//2593 2597//2597 2600//2598 +f 2594//2595 2598//2599 2597//2597 +f 2595//2596 2599//2600 2598//2599 +f 2596//2594 2600//2598 2599//2600 +f 2601//2601 2605//2602 2604//2603 +f 2602//2604 2606//2605 2601//2601 +f 2603//2606 2607//2607 2602//2604 +f 2604//2603 2608//2608 2603//2606 +f 2605//2602 2609//2609 2608//2608 +f 2606//2605 2610//2610 2605//2602 +f 2607//2607 2611//2611 2606//2605 +f 2608//2608 2612//2612 2607//2607 +f 2609//2609 2613//2613 2612//2612 +f 2610//2610 2614//2614 2613//2613 +f 2611//2611 2615//2615 2610//2610 +f 2612//2612 2616//2616 2615//2615 +f 2613//2613 2617//2617 2620//2618 +f 2614//2614 2618//2619 2617//2617 +f 2615//2615 2619//2620 2618//2619 +f 2616//2616 2620//2618 2619//2620 +f 2621//2621 2625//2622 2628//2623 +f 2622//2624 2626//2625 2621//2621 +f 2623//2626 2627//2627 2626//2625 +f 2624//2628 2628//2623 2623//2626 +f 2625//2622 2629//2629 2632//2630 +f 2626//2625 2630//2631 2629//2629 +f 2627//2627 2631//2632 2630//2631 +f 2628//2623 2632//2630 2631//2632 +f 2633//2633 2637//2634 2640//2635 +f 2634//2636 2638//2637 2637//2634 +f 2635//2638 2639//2639 2638//2637 +f 2636//2640 2640//2635 2639//2639 +f 2641//2641 2645//2642 2644//2643 +f 2642//2644 2646//2645 2641//2641 +f 2643//2646 2647//2647 2646//2645 +f 2644//2643 2648//2648 2643//2646 +f 2645//2642 2649//2649 2648//2648 +f 2646//2645 2650//2650 2649//2649 +f 2647//2647 2651//2651 2646//2645 +f 2648//2648 2652//2652 2651//2651 +f 2649//2649 2653//2653 2652//2652 +f 2650//2650 2654//2654 2653//2653 +f 2651//2651 2655//2655 2650//2650 +f 2652//2652 2656//2656 2655//2655 +f 2653//2653 2657//2657 2656//2656 +f 2654//2654 2658//2658 2657//2657 +f 2655//2655 2659//2659 2654//2654 +f 2656//2656 2660//2660 2659//2659 +f 2657//2657 2661//2661 2664//2662 +f 2658//2658 2662//2663 2657//2657 +f 2659//2659 2663//2664 2662//2663 +f 2660//2660 2664//2662 2659//2659 +f 2661//2661 2665//2665 2668//2666 +f 2662//2663 2666//2667 2665//2665 +f 2663//2664 2667//2668 2666//2667 +f 2664//2662 2668//2666 2667//2668 +f 2669//2669 2673//2670 2672//2671 +f 2670//2672 2674//2673 2673//2670 +f 2671//2674 2675//2675 2670//2672 +f 2672//2671 2676//2676 2675//2675 +f 2673//2670 2677//2677 2676//2676 +f 2674//2673 2678//2678 2677//2677 +f 2675//2675 2679//2679 2674//2673 +f 2676//2676 2680//2680 2679//2679 +f 2677//2677 2681//2681 2684//2682 +f 2678//2678 2682//2683 2681//2681 +f 2679//2679 2683//2684 2682//2683 +f 2680//2680 2684//2682 2683//2684 +f 2685//2685 2689//2686 2692//2687 +f 2686//2688 2690//2689 2689//2686 +f 2687//2690 2691//2691 2690//2689 +f 2688//2692 2692//2687 2691//2691 +f 2693//2693 2697//2694 2696//2695 +f 2694//2696 2698//2697 2693//2693 +f 2695//2698 2699//2699 2694//2696 +f 2696//2695 2700//2700 2695//2698 +f 2697//2694 2701//2701 2704//2702 +f 2698//2697 2702//2703 2701//2701 +f 2699//2699 2703//2704 2702//2703 +f 2700//2700 2704//2702 2703//2704 +f 2701//2701 2705//2705 2704//2702 +f 2702//2703 2706//2706 2701//2701 +f 2703//2704 2707//2707 2702//2703 +f 2704//2702 2708//2708 2703//2704 +f 2705//2705 2709//2709 2712//2710 +f 2706//2706 2710//2711 2709//2709 +f 2707//2707 2711//2712 2710//2711 +f 2708//2708 2712//2710 2711//2712 +f 2709//2709 2713//2713 2712//2710 +f 2710//2711 2714//2714 2709//2709 +f 2711//2712 2715//2715 2710//2711 +f 2712//2710 2716//2716 2711//2712 +f 2713//2713 2717//2717 2720//2718 +f 2714//2714 2718//2719 2717//2717 +f 2715//2715 2719//2720 2718//2719 +f 2716//2716 2720//2718 2719//2720 +f 2717//2717 2721//2721 2724//2722 +f 2718//2719 2722//2723 2721//2721 +f 2719//2720 2723//2724 2722//2723 +f 2720//2718 2724//2722 2723//2724 +f 2725//2725 2729//2726 2732//2727 +f 2726//2728 2730//2729 2725//2725 +f 2727//2730 2731//2731 2730//2729 +f 2728//2732 2732//2727 2727//2730 +f 2729//2726 2733//2733 2732//2727 +f 2730//2729 2734//2734 2733//2733 +f 2731//2731 2735//2735 2730//2729 +f 2732//2727 2736//2736 2735//2735 +f 2733//2733 2737//2737 2740//2738 +f 2734//2734 2738//2739 2737//2737 +f 2735//2735 2739//2740 2738//2739 +f 2736//2736 2740//2738 2739//2740 +f 2737//2737 2741//2741 2744//2742 +f 2738//2739 2742//2743 2741//2741 +f 2739//2740 2743//2744 2742//2743 +f 2740//2738 2744//2742 2743//2744 +f 2745//2745 2749//2746 2748//2747 +f 2746//2748 2750//2749 2745//2745 +f 2747//2750 2751//2751 2746//2748 +f 2748//2747 2752//2752 2747//2750 +f 2749//2746 2753//2753 2756//2754 +f 2750//2749 2754//2755 2753//2753 +f 2751//2751 2755//2756 2754//2755 +f 2752//2752 2756//2754 2755//2756 +f 2757//2757 2761//2758 2764//2759 +f 2758//2760 2762//2761 2761//2758 +f 2759//2762 2763//2763 2762//2761 +f 2760//2764 2764//2759 2763//2763 +f 2765//2765 2769//2766 2772//2767 +f 2766//2768 2770//2769 2769//2766 +f 2767//2770 2771//2771 2770//2769 +f 2768//2772 2772//2767 2771//2771 +f 2769//2766 2773//2773 2772//2767 +f 2770//2769 2774//2774 2769//2766 +f 2771//2771 2775//2775 2770//2769 +f 2772//2767 2776//2776 2771//2771 +f 2773//2773 2777//2777 2780//2778 +f 2774//2774 2778//2779 2777//2777 +f 2775//2775 2779//2780 2778//2779 +f 2776//2776 2780//2778 2779//2780 +f 2777//2777 2781//2781 2780//2778 +f 2778//2779 2782//2782 2777//2777 +f 2779//2780 2783//2783 2778//2779 +f 2780//2778 2784//2784 2779//2780 +f 2781//2781 2785//2785 2788//2786 +f 2782//2782 2786//2787 2785//2785 +f 2783//2783 2787//2788 2786//2787 +f 2784//2784 2788//2786 2787//2788 +f 2785//2785 2789//2789 2792//2790 +f 2786//2787 2790//2791 2789//2789 +f 2787//2788 2791//2792 2790//2791 +f 2788//2786 2792//2790 2791//2792 +f 2793//2793 2797//2794 2796//2795 +f 2794//2796 2798//2797 2797//2794 +f 2795//2798 2799//2799 2794//2796 +f 2796//2795 2800//2800 2799//2799 +f 2797//2794 2801//2801 2804//2802 +f 2798//2797 2802//2803 2797//2794 +f 2799//2799 2803//2804 2802//2803 +f 2800//2800 2804//2802 2799//2799 +f 2801//2801 2805//2805 2808//2806 +f 2802//2803 2806//2807 2805//2805 +f 2803//2804 2807//2808 2806//2807 +f 2804//2802 2808//2806 2807//2808 +f 2809//2809 2813//2810 2816//2811 +f 2810//2812 2814//2813 2813//2810 +f 2811//2814 2815//2815 2814//2813 +f 2812//2816 2816//2811 2815//2815 +f 2817//2817 2821//2818 2820//2819 +f 2818//2820 2822//2821 2821//2818 +f 2819//2822 2823//2823 2818//2820 +f 2820//2819 2824//2824 2823//2823 +f 2821//2818 2825//2825 2828//2826 +f 2822//2821 2826//2827 2821//2818 +f 2823//2823 2827//2828 2826//2827 +f 2824//2824 2828//2826 2823//2823 +f 2825//2825 2829//2829 2832//2830 +f 2826//2827 2830//2831 2825//2825 +f 2827//2828 2831//2832 2830//2831 +f 2828//2826 2832//2830 2827//2828 +f 2829//2829 2833//2833 2832//2830 +f 2830//2831 2834//2834 2833//2833 +f 2831//2832 2835//2835 2830//2831 +f 2832//2830 2836//2836 2835//2835 +f 2833//2833 2837//2837 2840//2838 +f 2834//2834 2838//2839 2833//2833 +f 2835//2835 2839//2840 2838//2839 +f 2836//2836 2840//2838 2835//2835 +f 2837//2837 2841//2841 2840//2838 +f 2838//2839 2842//2842 2841//2841 +f 2839//2840 2843//2843 2838//2839 +f 2840//2838 2844//2844 2843//2843 +f 2841//2841 2845//2845 2848//2846 +f 2842//2842 2846//2847 2845//2845 +f 2843//2843 2847//2848 2846//2847 +f 2844//2844 2848//2846 2847//2848 +f 2849//2849 2853//2850 2852//2851 +f 2850//2852 2854//2853 2849//2849 +f 2851//2854 2855//2855 2850//2852 +f 2852//2851 2856//2856 2851//2854 +f 2853//2850 2857//2857 2860//2858 +f 2854//2853 2858//2859 2857//2857 +f 2855//2855 2859//2860 2858//2859 +f 2856//2856 2860//2858 2859//2860 +f 2857//2857 2861//2861 2864//2862 +f 2858//2859 2862//2863 2857//2857 +f 2859//2860 2863//2864 2862//2863 +f 2860//2858 2864//2862 2859//2860 +f 2861//2861 2865//2865 2868//2866 +f 2862//2863 2866//2867 2865//2865 +f 2863//2864 2867//2868 2866//2867 +f 2864//2862 2868//2866 2867//2868 +f 2869//2869 2873//2870 2872//2871 +f 2870//2872 2874//2873 2873//2870 +f 2871//2874 2875//2875 2870//2872 +f 2872//2871 2876//2876 2875//2875 +f 2873//2870 2877//2877 2880//2878 +f 2874//2873 2878//2879 2877//2877 +f 2875//2875 2879//2880 2878//2879 +f 2876//2876 2880//2878 2879//2880 +f 2881//2881 2885//2882 2888//2883 +f 2882//2884 2886//2885 2885//2882 +f 2883//2886 2887//2887 2886//2885 +f 2884//2888 2888//2883 2887//2887 +f 2889//2889 2893//2890 2892//2891 +f 2890//2892 2894//2893 2889//2889 +f 2891//2894 2895//2895 2890//2892 +f 2892//2891 2896//2896 2891//2894 +f 2893//2890 2897//2897 2900//2898 +f 2894//2893 2898//2899 2897//2897 +f 2895//2895 2899//2900 2898//2899 +f 2896//2896 2900//2898 2899//2900 +f 2897//2897 2901//2901 2900//2898 +f 2898//2899 2902//2902 2897//2897 +f 2899//2900 2903//2903 2898//2899 +f 2900//2898 2904//2904 2899//2900 +f 2901//2901 2905//2905 2908//2906 +f 2902//2902 2906//2907 2905//2905 +f 2903//2903 2907//2908 2906//2907 +f 2904//2904 2908//2906 2907//2908 +f 2905//2905 2909//2909 2908//2906 +f 2906//2907 2910//2910 2905//2905 +f 2907//2908 2911//2911 2906//2907 +f 2908//2906 2912//2912 2907//2908 +f 2909//2909 2913//2913 2916//2914 +f 2910//2910 2914//2915 2913//2913 +f 2911//2911 2915//2916 2914//2915 +f 2912//2912 2916//2914 2915//2916 +f 2917//2917 2921//2918 2920//2919 +f 2918//2920 2922//2921 2917//2917 +f 2919//2922 2923//2923 2918//2920 +f 2920//2919 2924//2924 2919//2922 +f 2921//2918 2925//2925 2928//2926 +f 2922//2921 2926//2927 2925//2925 +f 2923//2923 2927//2928 2926//2927 +f 2924//2924 2928//2926 2927//2928 +f 2925//2925 2929//2929 2932//2930 +f 2926//2927 2930//2931 2929//2929 +f 2927//2928 2931//2932 2930//2931 +f 2928//2926 2932//2930 2931//2932 +f 2933//2933 2937//2934 2940//2935 +f 2934//2936 2938//2937 2937//2934 +f 2935//2938 2939//2939 2938//2937 +f 2936//2940 2940//2935 2939//2939 +f 2941//2941 2945//2942 2944//2943 +f 2942//2944 2946//2945 2941//2941 +f 2943//2946 2947//2947 2942//2944 +f 2944//2943 2948//2948 2943//2946 +f 2945//2942 2949//2949 2952//2950 +f 2946//2945 2950//2951 2949//2949 +f 2947//2947 2951//2952 2950//2951 +f 2948//2948 2952//2950 2951//2952 +f 2949//2949 2953//2953 2952//2950 +f 2950//2951 2954//2954 2949//2949 +f 2951//2952 2955//2955 2950//2951 +f 2952//2950 2956//2956 2951//2952 +f 2953//2953 2957//2957 2960//2958 +f 2954//2954 2958//2959 2957//2957 +f 2955//2955 2959//2960 2958//2959 +f 2956//2956 2960//2958 2959//2960 +f 2957//2957 2961//2961 2960//2958 +f 2958//2959 2962//2962 2957//2957 +f 2959//2960 2963//2963 2958//2959 +f 2960//2958 2964//2964 2959//2960 +f 2961//2961 2965//2965 2964//2964 +f 2962//2962 2966//2966 2961//2961 +f 2963//2963 2967//2967 2962//2962 +f 2964//2964 2968//2968 2963//2963 +f 2965//2965 2969//2969 2972//2970 +f 2966//2966 2970//2971 2969//2969 +f 2967//2967 2971//2972 2970//2971 +f 2968//2968 2972//2970 2971//2972 +f 2973//2973 2977//2974 2980//2975 +f 2974//2976 2978//2977 2973//2973 +f 2975//2978 2979//2979 2978//2977 +f 2976//2980 2980//2975 2975//2978 +f 2977//2974 2981//2981 2984//2982 +f 2978//2977 2982//2983 2977//2974 +f 2979//2979 2983//2984 2982//2983 +f 2980//2975 2984//2982 2979//2979 +f 2981//2981 2985//2985 2988//2986 +f 2982//2983 2986//2987 2985//2985 +f 2983//2984 2987//2988 2986//2987 +f 2984//2982 2988//2986 2987//2988 +f 2985//2985 2989//2989 2992//2990 +f 2986//2987 2990//2991 2989//2989 +f 2987//2988 2991//2992 2990//2991 +f 2988//2986 2992//2990 2991//2992 +f 2993//2993 2997//2994 2996//2995 +f 2994//2996 2998//2997 2997//2994 +f 2995//2998 2999//2999 2994//2996 +f 2996//2995 3000//3000 2999//2999 +f 2997//2994 3001//3001 3004//3002 +f 2998//2997 3002//3003 3001//3001 +f 2999//2999 3003//3004 3002//3003 +f 3000//3000 3004//3002 3003//3004 +f 3005//3005 3009//3006 3012//3007 +f 3006//3008 3010//3009 3009//3006 +f 3007//3010 3011//3011 3010//3009 +f 3008//3012 3012//3007 3011//3011 +f 3013//3013 3017//3014 3016//3015 +f 3014//3016 3018//3017 3017//3014 +f 3015//3018 3019//3019 3014//3016 +f 3016//3015 3020//3020 3019//3019 +f 3017//3014 3021//3021 3024//3022 +f 3018//3017 3022//3023 3017//3014 +f 3019//3019 3023//3024 3022//3023 +f 3020//3020 3024//3022 3019//3019 +f 3021//3021 3025//3025 3024//3022 +f 3022//3023 3026//3026 3025//3025 +f 3023//3024 3027//3027 3022//3023 +f 3024//3022 3028//3028 3027//3027 +f 3025//3025 3029//3029 3032//3030 +f 3026//3026 3030//3031 3025//3025 +f 3027//3027 3031//3032 3030//3031 +f 3028//3028 3032//3030 3027//3027 +f 3029//3029 3033//3033 3036//3034 +f 3030//3031 3034//3035 3029//3029 +f 3031//3032 3035//3036 3034//3035 +f 3032//3030 3036//3034 3031//3032 +f 3033//3033 3037//3037 3040//3038 +f 3034//3035 3038//3039 3037//3037 +f 3035//3036 3039//3040 3038//3039 +f 3036//3034 3040//3038 3039//3040 +f 3041//3041 3045//3042 3044//3043 +f 3042//3044 3046//3045 3045//3042 +f 3043//3046 3047//3047 3042//3044 +f 3044//3043 3048//3048 3047//3047 +f 3045//3042 3049//3049 3052//3050 +f 3046//3045 3050//3051 3045//3042 +f 3047//3047 3051//3052 3050//3051 +f 3048//3048 3052//3050 3047//3047 +f 3049//3049 3053//3053 3056//3054 +f 3050//3051 3054//3055 3053//3053 +f 3051//3052 3055//3056 3054//3055 +f 3052//3050 3056//3054 3055//3056 +f 3057//3057 3061//3058 3064//3059 +f 3058//3060 3062//3061 3061//3058 +f 3059//3062 3063//3063 3062//3061 +f 3060//3064 3064//3059 3063//3063 +f 3065//3065 3069//3066 3068//3067 +f 3066//3068 3070//3069 3065//3065 +f 3067//3070 3071//3071 3066//3068 +f 3068//3067 3072//3072 3067//3070 +f 3069//3066 3073//3073 3072//3072 +f 3070//3069 3074//3074 3069//3066 +f 3071//3071 3075//3075 3070//3069 +f 3072//3072 3076//3076 3071//3071 +f 3073//3073 3077//3077 3080//3078 +f 3074//3074 3078//3079 3077//3077 +f 3075//3075 3079//3080 3078//3079 +f 3076//3076 3080//3078 3079//3080 +f 3077//3077 3081//3081 3084//3082 +f 3078//3079 3082//3083 3081//3081 +f 3079//3080 3083//3084 3082//3083 +f 3080//3078 3084//3082 3083//3084 +f 3081//3081 3085//3085 3084//3082 +f 3082//3083 3086//3086 3081//3081 +f 3083//3084 3087//3087 3082//3083 +f 3084//3082 3088//3088 3083//3084 +f 3085//3085 3089//3089 3092//3090 +f 3086//3086 3090//3091 3089//3089 +f 3087//3087 3091//3092 3090//3091 +f 3088//3088 3092//3090 3091//3092 +f 3089//3089 3093//3093 3096//3094 +f 3090//3091 3094//3095 3093//3093 +f 3091//3092 3095//3096 3094//3095 +f 3092//3090 3096//3094 3095//3096 +f 3097//3097 3101//3098 3100//3099 +f 3098//3100 3102//3101 3097//3097 +f 3099//3102 3103//3103 3098//3100 +f 3100//3099 3104//3104 3099//3102 +f 3101//3098 3105//3105 3104//3104 +f 3102//3101 3106//3106 3101//3098 +f 3103//3103 3107//3107 3102//3101 +f 3104//3104 3108//3108 3103//3103 +f 3105//3105 3109//3109 3112//3110 +f 3106//3106 3110//3111 3105//3105 +f 3107//3107 3111//3112 3110//3111 +f 3108//3108 3112//3110 3107//3107 +f 3109//3109 3113//3113 3116//3114 +f 3110//3111 3114//3115 3113//3113 +f 3111//3112 3115//3116 3114//3115 +f 3112//3110 3116//3114 3115//3116 +f 3117//3117 3121//3118 3124//3119 +f 3118//3120 3122//3121 3117//3117 +f 3119//3122 3123//3123 3122//3121 +f 3120//3124 3124//3119 3119//3122 +f 3121//3118 3125//3125 3128//3126 +f 3122//3121 3126//3127 3125//3125 +f 3123//3123 3127//3128 3126//3127 +f 3124//3119 3128//3126 3127//3128 +f 3129//3129 3133//3130 3136//3131 +f 3130//3132 3134//3133 3133//3130 +f 3131//3134 3135//3135 3134//3133 +f 3132//3136 3136//3131 3135//3135 +f 3137//3137 3141//3138 3144//3139 +f 3138//3140 3142//3141 3141//3138 +f 3139//3142 3143//3143 3142//3141 +f 3140//3144 3144//3139 3143//3143 +f 3141//3138 3145//3145 3148//3146 +f 3142//3141 3146//3147 3145//3145 +f 3143//3143 3147//3148 3146//3147 +f 3144//3139 3148//3146 3147//3148 +f 3145//3145 3149//3149 3152//3150 +f 3146//3147 3150//3151 3149//3149 +f 3147//3148 3151//3152 3150//3151 +f 3148//3146 3152//3150 3151//3152 +f 3149//3149 3153//3153 3152//3150 +f 3150//3151 3154//3154 3153//3153 +f 3151//3152 3155//3155 3150//3151 +f 3152//3150 3156//3156 3155//3155 +f 3153//3153 3157//3157 3156//3156 +f 3154//3154 3158//3158 3157//3157 +f 3155//3155 3159//3159 3154//3154 +f 3156//3156 3160//3160 3159//3159 +f 3157//3157 3161//3161 3164//3162 +f 3158//3158 3162//3163 3161//3161 +f 3159//3159 3163//3164 3162//3163 +f 3160//3160 3164//3162 3163//3164 +f 3165//3165 3169//3166 3172//3167 +f 3166//3168 3170//3169 3165//3165 +f 3167//3170 3171//3171 3170//3169 +f 3168//3172 3172//3167 3167//3170 +f 3169//3166 3173//3173 3172//3167 +f 3170//3169 3174//3174 3173//3173 +f 3171//3171 3175//3175 3170//3169 +f 3172//3167 3176//3176 3175//3175 +f 3173//3173 3177//3177 3180//3178 +f 3174//3174 3178//3179 3177//3177 +f 3175//3175 3179//3180 3178//3179 +f 3176//3176 3180//3178 3179//3180 +f 3181//3181 3185//3182 3188//3183 +f 3182//3184 3186//3185 3185//3182 +f 3183//3186 3187//3187 3186//3185 +f 3184//3188 3188//3183 3187//3187 +f 3189//3189 3193//3190 3192//3191 +f 3190//3192 3194//3193 3189//3189 +f 3191//3194 3195//3195 3190//3192 +f 3192//3191 3196//3196 3191//3194 +f 3193//3190 3197//3197 3200//3198 +f 3194//3193 3198//3199 3197//3197 +f 3195//3195 3199//3200 3198//3199 +f 3196//3196 3200//3198 3199//3200 +f 3197//3197 3201//3201 3200//3198 +f 3198//3199 3202//3202 3197//3197 +f 3199//3200 3203//3203 3198//3199 +f 3200//3198 3204//3204 3199//3200 +f 3201//3201 3205//3205 3204//3204 +f 3202//3202 3206//3206 3201//3201 +f 3203//3203 3207//3207 3202//3202 +f 3204//3204 3208//3208 3203//3203 +f 3205//3205 3209//3209 3208//3208 +f 3206//3206 3210//3210 3205//3205 +f 3207//3207 3211//3211 3206//3206 +f 3208//3208 3212//3212 3207//3207 +f 3209//3209 3213//3213 3216//3214 +f 3210//3210 3214//3215 3213//3213 +f 3211//3211 3215//3216 3214//3215 +f 3212//3212 3216//3214 3215//3216 +f 3213//3213 3217//3217 3220//3218 +f 3214//3215 3218//3219 3217//3217 +f 3215//3216 3219//3220 3218//3219 +f 3216//3214 3220//3218 3219//3220 +f 3221//3221 3225//3222 3228//3223 +f 3222//3224 3226//3225 3221//3221 +f 3223//3226 3227//3227 3226//3225 +f 3224//3228 3228//3223 3223//3226 +f 3225//3222 3229//3229 3232//3230 +f 3226//3225 3230//3231 3225//3222 +f 3227//3227 3231//3232 3230//3231 +f 3228//3223 3232//3230 3227//3227 +f 3229//3229 3233//3233 3232//3230 +f 3230//3231 3234//3234 3233//3233 +f 3231//3232 3235//3235 3230//3231 +f 3232//3230 3236//3236 3235//3235 +f 3233//3233 3237//3237 3240//3238 +f 3234//3234 3238//3239 3237//3237 +f 3235//3235 3239//3240 3238//3239 +f 3236//3236 3240//3238 3239//3240 +f 3241//3241 3245//3242 3248//3243 +f 3242//3244 3246//3245 3241//3241 +f 3243//3246 3247//3247 3246//3245 +f 3244//3248 3248//3243 3243//3246 +f 3245//3242 3249//3249 3252//3250 +f 3246//3245 3250//3251 3249//3249 +f 3247//3247 3251//3252 3250//3251 +f 3248//3243 3252//3250 3251//3252 +f 3253//3253 3257//3254 3260//3255 +f 3254//3256 3258//3257 3257//3254 +f 3255//3258 3259//3259 3258//3257 +f 3256//3260 3260//3255 3259//3259 +f 3261//3261 3265//3262 3268//3263 +f 3262//3264 3266//3265 3265//3262 +f 3263//3266 3267//3267 3266//3265 +f 3264//3268 3268//3263 3267//3267 +f 3265//3262 3269//3269 3272//3270 +f 3266//3265 3270//3271 3269//3269 +f 3267//3267 3271//3272 3270//3271 +f 3268//3263 3272//3270 3267//3267 +f 3269//3269 3273//3273 3272//3270 +f 3270//3271 3274//3274 3269//3269 +f 3271//3272 3275//3275 3270//3271 +f 3272//3270 3276//3276 3275//3275 +f 3273//3273 3277//3277 3280//3278 +f 3274//3274 3278//3279 3273//3273 +f 3275//3275 3279//3280 3278//3279 +f 3276//3276 3280//3278 3275//3275 +f 3277//3277 3281//3281 3280//3278 +f 3278//3279 3282//3282 3281//3281 +f 3279//3280 3283//3283 3278//3279 +f 3280//3278 3284//3284 3283//3283 +f 3281//3281 3285//3285 3288//3286 +f 3282//3282 3286//3287 3285//3285 +f 3283//3283 3287//3288 3286//3287 +f 3284//3284 3288//3286 3287//3288 +f 3289//3289 3293//3290 3296//3291 +f 3290//3292 3294//3293 3293//3290 +f 3291//3294 3295//3295 3294//3293 +f 3292//3296 3296//3291 3295//3295 +f 3293//3290 3297//3297 3300//3298 +f 3294//3293 3298//3299 3297//3297 +f 3295//3295 3299//3300 3298//3299 +f 3296//3291 3300//3298 3299//3300 +f 3297//3297 3301//3301 3304//3302 +f 3298//3299 3302//3303 3301//3301 +f 3299//3300 3303//3304 3302//3303 +f 3300//3298 3304//3302 3303//3304 +f 3305//3305 3309//3306 3312//3307 +f 3306//3308 3310//3309 3309//3306 +f 3307//3310 3311//3311 3310//3309 +f 3308//3312 3312//3307 3311//3311 +f 3313//3313 3317//3314 3316//3315 +f 3314//3316 3318//3317 3317//3314 +f 3315//3318 3319//3319 3314//3316 +f 3316//3315 3320//3320 3319//3319 +f 3317//3314 3321//3321 3320//3320 +f 3318//3317 3322//3322 3321//3321 +f 3319//3319 3323//3323 3318//3317 +f 3320//3320 3324//3324 3323//3323 +f 3321//3321 3325//3325 3328//3326 +f 3322//3322 3326//3327 3321//3321 +f 3323//3323 3327//3328 3326//3327 +f 3324//3324 3328//3326 3323//3323 +f 3325//3325 3329//3329 3332//3330 +f 3326//3327 3330//3331 3325//3325 +f 3327//3328 3331//3332 3330//3331 +f 3328//3326 3332//3330 3327//3328 +f 3329//3329 3333//3333 3336//3334 +f 3330//3331 3334//3335 3329//3329 +f 3331//3332 3335//3336 3334//3335 +f 3332//3330 3336//3334 3331//3332 +f 3333//3333 3337//3337 3336//3334 +f 3334//3335 3338//3338 3337//3337 +f 3335//3336 3339//3339 3334//3335 +f 3336//3334 3340//3340 3339//3339 +f 3337//3337 3341//3341 3344//3342 +f 3338//3338 3342//3343 3341//3341 +f 3339//3339 3343//3344 3342//3343 +f 3340//3340 3344//3342 3343//3344 +f 3345//3345 3349//3346 3348//3347 +f 3346//3348 3350//3349 3345//3345 +f 3347//3350 3351//3351 3346//3348 +f 3348//3347 3352//3352 3347//3350 +f 3349//3346 3353//3353 3356//3354 +f 3350//3349 3354//3355 3353//3353 +f 3351//3351 3355//3356 3354//3355 +f 3352//3352 3356//3354 3355//3356 +f 3353//3353 3357//3357 3360//3358 +f 3354//3355 3358//3359 3357//3357 +f 3355//3356 3359//3360 3358//3359 +f 3356//3354 3360//3358 3359//3360 +f 3357//3357 3361//3361 3364//3362 +f 3358//3359 3362//3363 3361//3361 +f 3359//3360 3363//3364 3362//3363 +f 3360//3358 3364//3362 3363//3364 +f 3365//3365 3369//3366 3368//3367 +f 3366//3368 3370//3369 3365//3365 +f 3367//3370 3371//3371 3366//3368 +f 3368//3367 3372//3372 3367//3370 +f 3369//3366 3373//3373 3376//3374 +f 3370//3369 3374//3375 3373//3373 +f 3371//3371 3375//3376 3374//3375 +f 3372//3372 3376//3374 3375//3376 +f 3377//3377 3381//3378 3384//3379 +f 3378//3380 3382//3381 3381//3378 +f 3379//3382 3383//3383 3382//3381 +f 3380//3384 3384//3379 3383//3383 +f 3385//3385 3389//3386 3392//3387 +f 3386//3388 3390//3389 3389//3386 +f 3387//3390 3391//3391 3390//3389 +f 3388//3392 3392//3387 3391//3391 +f 3389//3386 3393//3393 3392//3387 +f 3390//3389 3394//3394 3389//3386 +f 3391//3391 3395//3395 3390//3389 +f 3392//3387 3396//3396 3391//3391 +f 3393//3393 3397//3397 3396//3396 +f 3394//3394 3398//3398 3393//3393 +f 3395//3395 3399//3399 3394//3394 +f 3396//3396 3400//3400 3395//3395 +f 3397//3397 3401//3401 3400//3400 +f 3398//3398 3402//3402 3397//3397 +f 3399//3399 3403//3403 3398//3398 +f 3400//3400 3404//3404 3399//3399 +f 3401//3401 3405//3405 3408//3406 +f 3402//3402 3406//3407 3405//3405 +f 3403//3403 3407//3408 3406//3407 +f 3404//3404 3408//3406 3407//3408 +f 3405//3405 3409//3409 3412//3410 +f 3406//3407 3410//3411 3409//3409 +f 3407//3408 3411//3412 3410//3411 +f 3408//3406 3412//3410 3411//3412 +f 3413//3413 3417//3414 3416//3415 +f 3414//3416 3418//3417 3417//3414 +f 3415//3418 3419//3419 3414//3416 +f 3416//3415 3420//3420 3419//3419 +f 3417//3414 3421//3421 3424//3422 +f 3418//3417 3422//3423 3417//3414 +f 3419//3419 3423//3424 3422//3423 +f 3420//3420 3424//3422 3419//3419 +f 3421//3421 3425//3425 3428//3426 +f 3422//3423 3426//3427 3425//3425 +f 3423//3424 3427//3428 3426//3427 +f 3424//3422 3428//3426 3427//3428 +f 3429//3429 3433//3430 3436//3431 +f 3430//3432 3434//3433 3433//3430 +f 3431//3434 3435//3435 3434//3433 +f 3432//3436 3436//3431 3435//3435 +f 3437//3437 3441//3438 3440//3439 +f 3438//3440 3442//3441 3437//3437 +f 3439//3442 3443//3443 3438//3440 +f 3440//3439 3444//3444 3439//3442 +f 3441//3438 3445//3445 3448//3446 +f 3442//3441 3446//3447 3445//3445 +f 3443//3443 3447//3448 3446//3447 +f 3444//3444 3448//3446 3447//3448 +f 3445//3445 3449//3449 3452//3450 +f 3446//3447 3450//3451 3449//3449 +f 3447//3448 3451//3452 3450//3451 +f 3448//3446 3452//3450 3451//3452 +f 3449//3449 3453//3453 3452//3450 +f 3450//3451 3454//3454 3449//3449 +f 3451//3452 3455//3455 3450//3451 +f 3452//3450 3456//3456 3451//3452 +f 3453//3453 3457//3457 3456//3456 +f 3454//3454 3458//3458 3453//3453 +f 3455//3455 3459//3459 3454//3454 +f 3456//3456 3460//3460 3455//3455 +f 3457//3457 3461//3461 3460//3460 +f 3458//3458 3462//3462 3457//3457 +f 3459//3459 3463//3463 3458//3458 +f 3460//3460 3464//3464 3459//3459 +f 3461//3461 3465//3465 3468//3466 +f 3462//3462 3466//3467 3465//3465 +f 3463//3463 3467//3468 3466//3467 +f 3464//3464 3468//3466 3467//3468 +f 3469//3469 3473//3470 3472//3471 +f 3470//3472 3474//3473 3469//3469 +f 3471//3474 3475//3475 3470//3472 +f 3472//3471 3476//3476 3471//3474 +f 3473//3470 3477//3477 3480//3478 +f 3474//3473 3478//3479 3477//3477 +f 3475//3475 3479//3480 3478//3479 +f 3476//3476 3480//3478 3479//3480 +f 3477//3477 3481//3481 3484//3482 +f 3478//3479 3482//3483 3477//3477 +f 3479//3480 3483//3484 3482//3483 +f 3480//3478 3484//3482 3479//3480 +f 3481//3481 3485//3485 3488//3486 +f 3482//3483 3486//3487 3485//3485 +f 3483//3484 3487//3488 3486//3487 +f 3484//3482 3488//3486 3487//3488 +f 3489//3489 3493//3490 3496//3491 +f 3490//3492 3494//3493 3493//3490 +f 3491//3494 3495//3495 3494//3493 +f 3492//3496 3496//3491 3495//3495 +f 3493//3490 3497//3497 3500//3498 +f 3494//3493 3498//3499 3497//3497 +f 3495//3495 3499//3500 3498//3499 +f 3496//3491 3500//3498 3499//3500 +f 3501//3501 3505//3502 3508//3503 +f 3502//3504 3506//3505 3505//3502 +f 3503//3506 3507//3507 3506//3505 +f 3504//3508 3508//3503 3507//3507 +f 3509//3509 3513//3510 3512//3511 +f 3510//3512 3514//3513 3513//3510 +f 3511//3514 3515//3515 3510//3512 +f 3512//3511 3516//3516 3515//3515 +f 3513//3510 3517//3517 3516//3516 +f 3514//3513 3518//3518 3517//3517 +f 3515//3515 3519//3519 3514//3513 +f 3516//3516 3520//3520 3519//3519 +f 3517//3517 3521//3521 3524//3522 +f 3518//3518 3522//3523 3517//3517 +f 3519//3519 3523//3524 3522//3523 +f 3520//3520 3524//3522 3519//3519 +f 3521//3521 3525//3525 3528//3526 +f 3522//3523 3526//3527 3521//3521 +f 3523//3524 3527//3528 3526//3527 +f 3524//3522 3528//3526 3523//3524 +f 3525//3525 3529//3529 3528//3526 +f 3526//3527 3530//3530 3529//3529 +f 3527//3528 3531//3531 3526//3527 +f 3528//3526 3532//3532 3531//3531 +f 3529//3529 3533//3533 3536//3534 +f 3530//3530 3534//3535 3533//3533 +f 3531//3531 3535//3536 3534//3535 +f 3532//3532 3536//3534 3535//3536 +f 3537//3537 3541//3538 3540//3539 +f 3538//3540 3542//3541 3541//3538 +f 3539//3542 3543//3543 3538//3540 +f 3540//3539 3544//3544 3543//3543 +f 3541//3538 3545//3545 3548//3546 +f 3542//3541 3546//3547 3541//3538 +f 3543//3543 3547//3548 3546//3547 +f 3544//3544 3548//3546 3543//3543 +f 3545//3545 3549//3549 3552//3550 +f 3546//3547 3550//3551 3549//3549 +f 3547//3548 3551//3552 3550//3551 +f 3548//3546 3552//3550 3551//3552 +f 3553//3553 3557//3554 3560//3555 +f 3554//3556 3558//3557 3557//3554 +f 3555//3558 3559//3559 3558//3557 +f 3556//3560 3560//3555 3559//3559 +f 3561//3561 3565//3562 3568//3563 +f 3562//3564 3566//3565 3565//3562 +f 3563//3566 3567//3567 3566//3565 +f 3564//3568 3568//3563 3567//3567 +f 3565//3562 3569//3569 3572//3570 +f 3566//3565 3570//3571 3569//3569 +f 3567//3567 3571//3572 3570//3571 +f 3568//3563 3572//3570 3571//3572 +f 3569//3569 3573//3573 3576//3574 +f 3570//3571 3574//3575 3573//3573 +f 3571//3572 3575//3576 3574//3575 +f 3572//3570 3576//3574 3575//3576 +f 3573//3573 3577//3577 3576//3574 +f 3574//3575 3578//3578 3573//3573 +f 3575//3576 3579//3579 3574//3575 +f 3576//3574 3580//3580 3575//3576 +f 3577//3577 3581//3581 3584//3582 +f 3578//3578 3582//3583 3581//3581 +f 3579//3579 3583//3584 3582//3583 +f 3580//3580 3584//3582 3583//3584 +f 3581//3581 3585//3585 3584//3582 +f 3582//3583 3586//3586 3581//3581 +f 3583//3584 3587//3587 3582//3583 +f 3584//3582 3588//3588 3583//3584 +f 3585//3585 3589//3589 3592//3590 +f 3586//3586 3590//3591 3589//3589 +f 3587//3587 3591//3592 3590//3591 +f 3588//3588 3592//3590 3591//3592 +f 3593//3593 3597//3594 3600//3595 +f 3594//3596 3598//3597 3597//3594 +f 3595//3598 3599//3599 3598//3597 +f 3596//3600 3600//3595 3599//3599 +f 3597//3594 3601//3601 3600//3595 +f 3598//3597 3602//3602 3601//3601 +f 3599//3599 3603//3603 3598//3597 +f 3600//3595 3604//3604 3603//3603 +f 3601//3601 3605//3605 3604//3604 +f 3602//3602 3606//3606 3605//3605 +f 3603//3603 3607//3607 3602//3602 +f 3604//3604 3608//3608 3607//3607 +f 3605//3605 3609//3609 3612//3610 +f 3606//3606 3610//3611 3609//3609 +f 3607//3607 3611//3612 3610//3611 +f 3608//3608 3612//3610 3611//3612 +f 3613//3613 3617//3614 3620//3615 +f 3614//3616 3618//3617 3613//3613 +f 3615//3618 3619//3619 3618//3617 +f 3616//3620 3620//3615 3615//3618 +f 3617//3614 3621//3621 3624//3622 +f 3618//3617 3622//3623 3621//3621 +f 3619//3619 3623//3624 3622//3623 +f 3620//3615 3624//3622 3623//3624 +f 3625//3625 3629//3626 3632//3627 +f 3626//3628 3630//3629 3629//3626 +f 3627//3630 3631//3631 3630//3629 +f 3628//3632 3632//3627 3631//3631 +f 3633//3633 3637//3634 3636//3635 +f 3634//3636 3638//3637 3633//3633 +f 3635//3638 3639//3639 3634//3636 +f 3636//3635 3640//3640 3635//3638 +f 3637//3634 3641//3641 3644//3642 +f 3638//3637 3642//3643 3641//3641 +f 3639//3639 3643//3644 3642//3643 +f 3640//3640 3644//3642 3643//3644 +f 3641//3641 3645//3645 3644//3642 +f 3642//3643 3646//3646 3641//3641 +f 3643//3644 3647//3647 3642//3643 +f 3644//3642 3648//3648 3643//3644 +f 3645//3645 3649//3649 3648//3648 +f 3646//3646 3650//3650 3645//3645 +f 3647//3647 3651//3651 3646//3646 +f 3648//3648 3652//3652 3647//3647 +f 3649//3649 3653//3653 3656//3654 +f 3650//3650 3654//3655 3653//3653 +f 3651//3651 3655//3656 3654//3655 +f 3652//3652 3656//3654 3651//3651 +f 3653//3653 3657//3657 3660//3658 +f 3654//3655 3658//3659 3657//3657 +f 3655//3656 3659//3660 3658//3659 +f 3656//3654 3660//3658 3659//3660 +f 3661//3661 3665//3662 3668//3663 +f 3662//3664 3666//3665 3665//3662 +f 3663//3666 3667//3667 3666//3665 +f 3664//3668 3668//3663 3667//3667 +f 3665//3662 3669//3669 3668//3663 +f 3666//3665 3670//3670 3665//3662 +f 3667//3667 3671//3671 3666//3665 +f 3668//3663 3672//3672 3667//3667 +f 3669//3669 3673//3673 3676//3674 +f 3670//3670 3674//3675 3673//3673 +f 3671//3671 3675//3676 3674//3675 +f 3672//3672 3676//3674 3675//3676 +f 3677//3677 3681//3678 3684//3679 +f 3678//3680 3682//3681 3681//3678 +f 3679//3682 3683//3683 3682//3681 +f 3680//3684 3684//3679 3683//3683 +f 3685//3685 3689//3686 3688//3687 +f 3686//3688 3690//3689 3685//3685 +f 3687//3690 3691//3691 3686//3688 +f 3688//3687 3692//3692 3687//3690 +f 3689//3686 3693//3693 3696//3694 +f 3690//3689 3694//3695 3693//3693 +f 3691//3691 3695//3696 3694//3695 +f 3692//3692 3696//3694 3695//3696 +f 3693//3693 3697//3697 3696//3694 +f 3694//3695 3698//3698 3693//3693 +f 3695//3696 3699//3699 3694//3695 +f 3696//3694 3700//3700 3695//3696 +f 3697//3697 3701//3701 3700//3700 +f 3698//3698 3702//3702 3697//3697 +f 3699//3699 3703//3703 3698//3698 +f 3700//3700 3704//3704 3699//3699 +f 3701//3701 3705//3705 3704//3704 +f 3702//3702 3706//3706 3701//3701 +f 3703//3703 3707//3707 3702//3702 +f 3704//3704 3708//3708 3703//3703 +f 3705//3705 3709//3709 3712//3710 +f 3706//3706 3710//3711 3709//3709 +f 3707//3707 3711//3712 3710//3711 +f 3708//3708 3712//3710 3711//3712 +f 3709//3709 3713//3713 3716//3714 +f 3710//3711 3714//3715 3713//3713 +f 3711//3712 3715//3716 3714//3715 +f 3712//3710 3716//3714 3715//3716 +f 3717//3717 3721//3718 3720//3719 +f 3718//3720 3722//3721 3717//3717 +f 3719//3722 3723//3723 3718//3720 +f 3720//3719 3724//3724 3719//3722 +f 3721//3718 3725//3725 3728//3726 +f 3722//3721 3726//3727 3725//3725 +f 3723//3723 3727//3728 3726//3727 +f 3724//3724 3728//3726 3727//3728 +f 3725//3725 3729//3729 3728//3726 +f 3726//3727 3730//3730 3729//3729 +f 3727//3728 3731//3731 3726//3727 +f 3728//3726 3732//3732 3731//3731 +f 3729//3729 3733//3733 3736//3734 +f 3730//3730 3734//3735 3733//3733 +f 3731//3731 3735//3736 3734//3735 +f 3732//3732 3736//3734 3735//3736 +f 3737//3737 3741//3738 3740//3739 +f 3738//3740 3742//3741 3737//3737 +f 3739//3742 3743//3743 3738//3740 +f 3740//3739 3744//3744 3739//3742 +f 3741//3738 3745//3745 3748//3746 +f 3742//3741 3746//3747 3745//3745 +f 3743//3743 3747//3748 3746//3747 +f 3744//3744 3748//3746 3747//3748 +f 3749//3749 3753//3750 3756//3751 +f 3750//3752 3754//3753 3753//3750 +f 3751//3754 3755//3755 3754//3753 +f 3752//3756 3756//3751 3755//3755 +f 3757//3757 3761//3758 3760//3759 +f 3758//3760 3762//3761 3757//3757 +f 3759//3762 3763//3763 3758//3760 +f 3760//3759 3764//3764 3759//3762 +f 3761//3758 3765//3765 3764//3764 +f 3762//3761 3766//3766 3765//3765 +f 3763//3763 3767//3767 3762//3761 +f 3764//3764 3768//3768 3767//3767 +f 3765//3765 3769//3769 3768//3768 +f 3766//3766 3770//3770 3769//3769 +f 3767//3767 3771//3771 3766//3766 +f 3768//3768 3772//3772 3771//3771 +f 3769//3769 3773//3773 3776//3774 +f 3770//3770 3774//3775 3769//3769 +f 3771//3771 3775//3776 3774//3775 +f 3772//3772 3776//3774 3771//3771 +f 3773//3773 3777//3777 3776//3774 +f 3774//3775 3778//3778 3777//3777 +f 3775//3776 3779//3779 3774//3775 +f 3776//3774 3780//3780 3779//3779 +f 3777//3777 3781//3781 3784//3782 +f 3778//3778 3782//3783 3781//3781 +f 3779//3779 3783//3784 3782//3783 +f 3780//3780 3784//3782 3783//3784 +f 3785//3785 3789//3786 3792//3787 +f 3786//3788 3790//3789 3789//3786 +f 3787//3790 3791//3791 3790//3789 +f 3788//3792 3792//3787 3791//3791 +f 3789//3786 3793//3793 3796//3794 +f 3790//3789 3794//3795 3793//3793 +f 3791//3791 3795//3796 3794//3795 +f 3792//3787 3796//3794 3795//3796 +f 3793//3793 3797//3797 3800//3798 +f 3794//3795 3798//3799 3797//3797 +f 3795//3796 3799//3800 3798//3799 +f 3796//3794 3800//3798 3799//3800 +f 3801//3801 3805//3802 3808//3803 +f 3802//3804 3806//3805 3805//3802 +f 3803//3806 3807//3807 3806//3805 +f 3804//3808 3808//3803 3807//3807 +f 3809//3809 3813//3810 3812//3811 +f 3810//3812 3814//3813 3809//3809 +f 3811//3814 3815//3815 3810//3812 +f 3812//3811 3816//3816 3811//3814 +f 3813//3810 3817//3817 3816//3816 +f 3814//3813 3818//3818 3813//3810 +f 3815//3815 3819//3819 3814//3813 +f 3816//3816 3820//3820 3815//3815 +f 3817//3817 3821//3821 3820//3820 +f 3818//3818 3822//3822 3817//3817 +f 3819//3819 3823//3823 3818//3818 +f 3820//3820 3824//3824 3819//3819 +f 3821//3821 3825//3825 3824//3824 +f 3822//3822 3826//3826 3821//3821 +f 3823//3823 3827//3827 3822//3822 +f 3824//3824 3828//3828 3823//3823 +f 3825//3825 3829//3829 3832//3830 +f 3826//3826 3830//3831 3829//3829 +f 3827//3827 3831//3832 3830//3831 +f 3828//3828 3832//3830 3831//3832 +f 3829//3829 3833//3833 3832//3830 +f 3830//3831 3834//3834 3829//3829 +f 3831//3832 3835//3835 3830//3831 +f 3832//3830 3836//3836 3831//3832 +f 3833//3833 3837//3837 3840//3838 +f 3834//3834 3838//3839 3837//3837 +f 3835//3835 3839//3840 3838//3839 +f 3836//3836 3840//3838 3839//3840 +f 3841//3841 3845//3842 3844//3843 +f 3842//3844 3846//3845 3845//3842 +f 3843//3846 3847//3847 3842//3844 +f 3844//3843 3848//3848 3847//3847 +f 3845//3842 3849//3849 3852//3850 +f 3846//3845 3850//3851 3845//3842 +f 3847//3847 3851//3852 3850//3851 +f 3848//3848 3852//3850 3847//3847 +f 3849//3849 3853//3853 3856//3854 +f 3850//3851 3854//3855 3853//3853 +f 3851//3852 3855//3856 3854//3855 +f 3852//3850 3856//3854 3855//3856 +f 3853//3853 3857//3857 3860//3858 +f 3854//3855 3858//3859 3857//3857 +f 3855//3856 3859//3860 3858//3859 +f 3856//3854 3860//3858 3859//3860 +f 3861//3861 3865//3862 3864//3863 +f 3862//3864 3866//3865 3865//3862 +f 3863//3866 3867//3867 3862//3864 +f 3864//3863 3868//3868 3867//3867 +f 3865//3862 3869//3869 3872//3870 +f 3866//3865 3870//3871 3869//3869 +f 3867//3867 3871//3872 3870//3871 +f 3868//3868 3872//3870 3871//3872 +f 3873//3873 3877//3874 3880//3875 +f 3874//3876 3878//3877 3877//3874 +f 3875//3878 3879//3879 3878//3877 +f 3876//3880 3880//3875 3879//3879 +f 5//2 8//8 4//3 +f 1//1 2//4 5//2 +f 7//7 6//5 2//4 +f 3//6 4//3 7//7 +f 8//8 5//2 12//10 +f 5//2 6//5 9//9 +f 6//5 7//7 10//11 +f 7//7 8//8 11//12 +f 12//10 9//9 16//14 +f 14//15 13//13 9//9 +f 10//11 11//12 14//15 +f 16//14 15//16 11//12 +f 17//17 20//20 16//14 +f 18//18 17//17 13//13 +f 19//19 18//18 14//15 +f 20//20 19//19 15//16 +f 21//21 24//24 20//20 +f 17//17 18//18 21//21 +f 23//23 22//22 18//18 +f 19//19 20//20 23//23 +f 25//25 28//28 24//24 +f 26//26 25//25 21//21 +f 27//27 26//26 22//22 +f 28//28 27//27 23//23 +f 28//28 25//25 32//30 +f 25//25 26//26 29//29 +f 26//26 27//27 30//31 +f 27//27 28//28 31//32 +f 32//30 29//29 36//34 +f 29//29 30//31 33//33 +f 30//31 31//32 34//35 +f 31//32 32//30 35//36 +f 41//38 44//44 40//39 +f 37//37 38//40 41//38 +f 43//43 42//41 38//40 +f 39//42 40//39 43//43 +f 44//44 41//38 48//46 +f 46//47 45//45 41//38 +f 42//41 43//43 46//47 +f 48//46 47//48 43//43 +f 48//46 45//45 52//50 +f 45//45 46//47 49//49 +f 46//47 47//48 50//51 +f 47//48 48//46 51//52 +f 53//53 56//56 52//50 +f 54//54 53//53 49//49 +f 55//55 54//54 50//51 +f 56//56 55//55 51//52 +f 56//56 53//53 60//58 +f 53//53 54//54 57//57 +f 54//54 55//55 58//59 +f 55//55 56//56 59//60 +f 60//58 57//57 64//62 +f 62//63 61//61 57//57 +f 58//59 59//60 62//63 +f 64//62 63//64 59//60 +f 64//62 61//61 68//66 +f 61//61 62//63 65//65 +f 62//63 63//64 66//67 +f 63//64 64//62 67//68 +f 73//70 76//76 72//71 +f 74//73 73//70 69//69 +f 75//75 74//73 70//72 +f 76//76 75//75 71//74 +f 76//76 73//70 80//78 +f 73//70 74//73 77//77 +f 74//73 75//75 78//79 +f 75//75 76//76 79//80 +f 81//81 84//84 80//78 +f 82//82 81//81 77//77 +f 83//83 82//82 78//79 +f 84//84 83//83 79//80 +f 84//84 81//81 88//86 +f 81//81 82//82 85//85 +f 82//82 83//83 86//87 +f 83//83 84//84 87//88 +f 89//89 92//92 88//86 +f 85//85 86//87 89//89 +f 91//91 90//90 86//87 +f 87//88 88//86 91//91 +f 92//92 89//89 96//94 +f 94//95 93//93 89//89 +f 90//90 91//91 94//95 +f 96//94 95//96 91//91 +f 96//94 93//93 100//98 +f 93//93 94//95 97//97 +f 94//95 95//96 98//99 +f 95//96 96//94 99//100 +f 104//108 101//101 108//103 +f 101//101 102//104 105//102 +f 102//104 103//106 106//105 +f 103//106 104//108 107//107 +f 109//109 112//112 108//103 +f 110//110 109//109 105//102 +f 111//111 110//110 106//105 +f 112//112 111//111 107//107 +f 113//113 116//116 112//112 +f 114//114 113//113 109//109 +f 115//115 114//114 110//110 +f 116//116 115//115 111//111 +f 116//116 113//113 120//118 +f 113//113 114//114 117//117 +f 114//114 115//115 118//119 +f 115//115 116//116 119//120 +f 121//121 124//124 120//118 +f 117//117 118//119 121//121 +f 123//123 122//122 118//119 +f 119//120 120//118 123//123 +f 124//124 121//121 128//126 +f 121//121 122//122 125//125 +f 122//122 123//123 126//127 +f 123//123 124//124 127//128 +f 132//136 129//129 136//131 +f 129//129 130//132 133//130 +f 130//132 131//134 134//133 +f 131//134 132//136 135//135 +f 137//137 140//140 136//131 +f 138//138 137//137 133//130 +f 139//139 138//138 134//133 +f 140//140 139//139 135//135 +f 141//141 144//144 140//140 +f 137//137 138//138 141//141 +f 143//143 142//142 138//138 +f 139//139 140//140 143//143 +f 144//144 141//141 148//146 +f 146//147 145//145 141//141 +f 142//142 143//143 146//147 +f 148//146 147//148 143//143 +f 148//146 145//145 152//150 +f 145//145 146//147 149//149 +f 146//147 147//148 150//151 +f 147//148 148//146 151//152 +f 156//160 153//153 160//155 +f 158//157 157//154 153//153 +f 154//156 155//158 158//157 +f 160//155 159//159 155//158 +f 161//161 164//164 160//155 +f 157//154 158//157 161//161 +f 163//163 162//162 158//157 +f 159//159 160//155 163//163 +f 164//164 161//161 168//166 +f 161//161 162//162 165//165 +f 162//162 163//163 166//167 +f 163//163 164//164 167//168 +f 168//166 165//165 172//170 +f 170//171 169//169 165//165 +f 166//167 167//168 170//171 +f 172//170 171//172 167//168 +f 172//170 169//169 176//174 +f 169//169 170//171 173//173 +f 170//171 171//172 174//175 +f 171//172 172//170 175//176 +f 180//184 177//177 184//179 +f 177//177 178//180 181//178 +f 178//180 179//182 182//181 +f 179//182 180//184 183//183 +f 184//179 181//178 188//186 +f 181//178 182//181 185//185 +f 182//181 183//183 186//187 +f 183//183 184//179 187//188 +f 189//189 192//192 188//186 +f 190//190 189//189 185//185 +f 191//191 190//190 186//187 +f 192//192 191//191 187//188 +f 192//192 189//189 196//194 +f 189//189 190//190 193//193 +f 190//190 191//191 194//195 +f 191//191 192//192 195//196 +f 201//198 204//204 200//199 +f 197//197 198//200 201//198 +f 203//203 202//201 198//200 +f 199//202 200//199 203//203 +f 204//204 201//198 208//206 +f 206//207 205//205 201//198 +f 202//201 203//203 206//207 +f 208//206 207//208 203//203 +f 209//209 212//212 208//206 +f 210//210 209//209 205//205 +f 211//211 210//210 206//207 +f 212//212 211//211 207//208 +f 212//212 209//209 216//214 +f 209//209 210//210 213//213 +f 210//210 211//211 214//215 +f 211//211 212//212 215//216 +f 220//224 217//217 224//219 +f 222//221 221//218 217//217 +f 218//220 219//222 222//221 +f 224//219 223//223 219//222 +f 225//225 228//228 224//219 +f 221//218 222//221 225//225 +f 227//227 226//226 222//221 +f 223//223 224//219 227//227 +f 228//228 225//225 232//230 +f 225//225 226//226 229//229 +f 226//226 227//227 230//231 +f 227//227 228//228 231//232 +f 236//240 233//233 240//235 +f 238//237 237//234 233//233 +f 234//236 235//238 238//237 +f 240//235 239//239 235//238 +f 241//241 244//244 240//235 +f 237//234 238//237 241//241 +f 243//243 242//242 238//237 +f 239//239 240//235 243//243 +f 244//244 241//241 248//246 +f 241//241 242//242 245//245 +f 242//242 243//243 246//247 +f 243//243 244//244 247//248 +f 253//250 256//256 252//251 +f 254//253 253//250 249//249 +f 255//255 254//253 250//252 +f 256//256 255//255 251//254 +f 256//256 253//250 260//258 +f 258//259 257//257 253//250 +f 254//253 255//255 258//259 +f 260//258 259//260 255//255 +f 260//258 257//257 264//262 +f 257//257 258//259 261//261 +f 258//259 259//260 262//263 +f 259//260 260//258 263//264 +f 269//266 272//272 268//267 +f 270//269 269//266 265//265 +f 271//271 270//269 266//268 +f 272//272 271//271 267//270 +f 272//272 269//266 276//274 +f 269//266 270//269 273//273 +f 270//269 271//271 274//275 +f 271//271 272//272 275//276 +f 280//284 277//277 284//279 +f 277//277 278//280 281//278 +f 278//280 279//282 282//281 +f 279//282 280//284 283//283 +f 284//279 281//278 288//286 +f 281//278 282//281 285//285 +f 282//281 283//283 286//287 +f 283//283 284//279 287//288 +f 293//290 296//296 292//291 +f 294//293 293//290 289//289 +f 295//295 294//293 290//292 +f 296//296 295//295 291//294 +f 296//296 293//290 300//298 +f 293//290 294//293 297//297 +f 294//293 295//295 298//299 +f 295//295 296//296 299//300 +f 304//308 301//301 308//303 +f 301//301 302//304 305//302 +f 302//304 303//306 306//305 +f 303//306 304//308 307//307 +f 308//303 305//302 312//310 +f 305//302 306//305 309//309 +f 306//305 307//307 310//311 +f 307//307 308//303 311//312 +f 317//314 320//320 316//315 +f 318//317 317//314 313//313 +f 319//319 318//317 314//316 +f 320//320 319//319 315//318 +f 320//320 317//314 324//322 +f 317//314 318//317 321//321 +f 318//317 319//319 322//323 +f 319//319 320//320 323//324 +f 328//332 325//325 332//327 +f 325//325 326//328 329//326 +f 326//328 327//330 330//329 +f 327//330 328//332 331//331 +f 336//340 333//333 340//335 +f 333//333 334//336 337//334 +f 334//336 335//338 338//337 +f 335//338 336//340 339//339 +f 344//348 341//341 348//343 +f 341//341 342//344 345//342 +f 342//344 343//346 346//345 +f 343//346 344//348 347//347 +f 352//356 349//349 356//351 +f 349//349 350//352 353//350 +f 350//352 351//354 354//353 +f 351//354 352//356 355//355 +f 360//364 357//357 364//359 +f 357//357 358//360 361//358 +f 358//360 359//362 362//361 +f 359//362 360//364 363//363 +f 368//372 365//365 372//367 +f 365//365 366//368 369//366 +f 366//368 367//370 370//369 +f 367//370 368//372 371//371 +f 376//380 373//373 380//375 +f 373//373 374//376 377//374 +f 374//376 375//378 378//377 +f 375//378 376//380 379//379 +f 380//375 377//374 384//382 +f 377//374 378//377 381//381 +f 378//377 379//379 382//383 +f 379//379 380//375 383//384 +f 384//382 381//381 388//386 +f 386//387 385//385 381//381 +f 382//383 383//384 386//387 +f 388//386 387//388 383//384 +f 389//389 392//392 388//386 +f 390//390 389//389 385//385 +f 391//391 390//390 386//387 +f 392//392 391//391 387//388 +f 392//392 389//389 396//394 +f 394//395 393//393 389//389 +f 390//390 391//391 394//395 +f 396//394 395//396 391//391 +f 397//397 400//400 396//394 +f 393//393 394//395 397//397 +f 399//399 398//398 394//395 +f 395//396 396//394 399//399 +f 400//400 397//397 404//402 +f 397//397 398//398 401//401 +f 398//398 399//399 402//403 +f 399//399 400//400 403//404 +f 405//405 408//408 404//402 +f 406//406 405//405 401//401 +f 407//407 406//406 402//403 +f 408//408 407//407 403//404 +f 408//408 405//405 412//410 +f 405//405 406//406 409//409 +f 406//406 407//407 410//411 +f 407//407 408//408 411//412 +f 412//410 409//409 416//414 +f 409//409 410//411 413//413 +f 410//411 411//412 414//415 +f 411//412 412//410 415//416 +f 421//418 424//424 420//419 +f 422//421 421//418 417//417 +f 423//423 422//421 418//420 +f 424//424 423//423 419//422 +f 424//424 421//418 428//426 +f 421//418 422//421 425//425 +f 422//421 423//423 426//427 +f 423//423 424//424 427//428 +f 429//429 432//432 428//426 +f 430//430 429//429 425//425 +f 431//431 430//430 426//427 +f 432//432 431//431 427//428 +f 432//432 429//429 436//434 +f 434//435 433//433 429//429 +f 430//430 431//431 434//435 +f 436//434 435//436 431//431 +f 437//437 440//440 436//434 +f 433//433 434//435 437//437 +f 439//439 438//438 434//435 +f 435//436 436//434 439//439 +f 440//440 437//437 444//442 +f 437//437 438//438 441//441 +f 438//438 439//439 442//443 +f 439//439 440//440 443//444 +f 445//445 448//448 444//442 +f 441//441 442//443 445//445 +f 447//447 446//446 442//443 +f 443//444 444//442 447//447 +f 448//448 445//445 452//450 +f 450//451 449//449 445//445 +f 446//446 447//447 450//451 +f 452//450 451//452 447//447 +f 452//450 449//449 456//454 +f 449//449 450//451 453//453 +f 450//451 451//452 454//455 +f 451//452 452//450 455//456 +f 456//454 453//453 460//458 +f 453//453 454//455 457//457 +f 454//455 455//456 458//459 +f 455//456 456//454 459//460 +f 465//462 468//468 464//463 +f 461//461 462//464 465//462 +f 467//467 466//465 462//464 +f 463//466 464//463 467//467 +f 469//469 472//472 468//468 +f 465//462 466//465 469//469 +f 471//471 470//470 466//465 +f 467//467 468//468 471//471 +f 473//473 476//476 472//472 +f 474//474 473//473 469//469 +f 475//475 474//474 470//470 +f 476//476 475//475 471//471 +f 476//476 473//473 480//478 +f 478//479 477//477 473//473 +f 474//474 475//475 478//479 +f 480//478 479//480 475//475 +f 480//478 477//477 484//482 +f 477//477 478//479 481//481 +f 478//479 479//480 482//483 +f 479//480 480//478 483//484 +f 484//482 481//481 488//486 +f 486//487 485//485 481//481 +f 482//483 483//484 486//487 +f 488//486 487//488 483//484 +f 489//489 492//492 488//486 +f 485//485 486//487 489//489 +f 491//491 490//490 486//487 +f 487//488 488//486 491//491 +f 493//493 496//496 492//492 +f 494//494 493//493 489//489 +f 495//495 494//494 490//490 +f 496//496 495//495 491//491 +f 496//496 493//493 500//498 +f 493//493 494//494 497//497 +f 494//494 495//495 498//499 +f 495//495 496//496 499//500 +f 500//498 497//497 504//502 +f 497//497 498//499 501//501 +f 498//499 499//500 502//503 +f 499//500 500//498 503//504 +f 509//506 512//512 508//507 +f 505//505 506//508 509//506 +f 511//511 510//509 506//508 +f 507//510 508//507 511//511 +f 512//512 509//506 516//514 +f 509//506 510//509 513//513 +f 510//509 511//511 514//515 +f 511//511 512//512 515//516 +f 516//514 513//513 520//518 +f 513//513 514//515 517//517 +f 514//515 515//516 518//519 +f 515//516 516//514 519//520 +f 521//521 524//524 520//518 +f 517//517 518//519 521//521 +f 523//523 522//522 518//519 +f 524//524 523//523 519//520 +f 524//524 521//521 528//526 +f 526//527 525//525 521//521 +f 522//522 523//523 526//527 +f 528//526 527//528 523//523 +f 528//526 525//525 532//530 +f 525//525 526//527 529//529 +f 526//527 527//528 530//531 +f 527//528 528//526 531//532 +f 532//530 529//529 536//534 +f 529//529 530//531 533//533 +f 530//531 531//532 534//535 +f 531//532 532//530 535//536 +f 537//537 540//540 536//534 +f 538//538 537//537 533//533 +f 539//539 538//538 534//535 +f 540//540 539//539 535//536 +f 541//541 544//544 540//540 +f 542//542 541//541 537//537 +f 543//543 542//542 538//538 +f 544//544 543//543 539//539 +f 544//544 541//541 548//546 +f 541//541 542//542 545//545 +f 542//542 543//543 546//547 +f 543//543 544//544 547//548 +f 552//556 549//549 556//551 +f 549//549 550//552 553//550 +f 550//552 551//554 554//553 +f 551//554 552//556 555//555 +f 557//557 560//560 556//551 +f 558//558 557//557 553//550 +f 559//559 558//558 554//553 +f 560//560 559//559 555//555 +f 560//560 557//557 564//562 +f 562//563 561//561 557//557 +f 558//558 559//559 562//563 +f 564//562 563//564 559//559 +f 565//565 568//568 564//562 +f 561//561 562//563 565//565 +f 567//567 566//566 562//563 +f 563//564 564//562 567//567 +f 569//569 572//572 568//568 +f 570//570 569//569 565//565 +f 571//571 570//570 566//566 +f 572//572 571//571 567//567 +f 573//573 576//576 572//572 +f 569//569 570//570 573//573 +f 575//575 574//574 570//570 +f 571//571 572//572 575//575 +f 576//576 573//573 580//578 +f 578//579 577//577 573//573 +f 574//574 575//575 578//579 +f 580//578 579//580 575//575 +f 581//581 584//584 580//578 +f 582//582 581//581 577//577 +f 583//583 582//582 578//579 +f 584//584 583//583 579//580 +f 585//585 588//588 584//584 +f 586//586 585//585 581//581 +f 587//587 586//586 582//582 +f 588//588 587//587 583//583 +f 588//588 585//585 592//590 +f 585//585 586//586 589//589 +f 586//586 587//587 590//591 +f 587//587 588//588 591//592 +f 597//594 600//600 596//595 +f 593//593 594//596 597//594 +f 599//599 598//597 594//596 +f 595//598 596//595 599//599 +f 600//600 597//594 604//602 +f 602//603 601//601 597//594 +f 598//597 599//599 602//603 +f 604//602 603//604 599//599 +f 605//605 608//608 604//602 +f 601//601 602//603 605//605 +f 607//607 606//606 602//603 +f 603//604 604//602 607//607 +f 609//609 612//612 608//608 +f 610//610 609//609 605//605 +f 611//611 610//610 606//606 +f 612//612 611//611 607//607 +f 612//612 609//609 616//614 +f 609//609 610//610 613//613 +f 610//610 611//611 614//615 +f 611//611 612//612 615//616 +f 616//614 613//613 620//618 +f 618//619 617//617 613//613 +f 614//615 615//616 618//619 +f 620//618 619//620 615//616 +f 620//618 617//617 624//622 +f 617//617 618//619 621//621 +f 618//619 619//620 622//623 +f 619//620 620//618 623//624 +f 625//625 628//628 624//622 +f 626//626 625//625 621//621 +f 627//627 626//626 622//623 +f 628//628 627//627 623//624 +f 628//628 625//625 632//630 +f 630//631 629//629 625//625 +f 626//626 627//627 630//631 +f 632//630 631//632 627//627 +f 632//630 629//629 636//634 +f 629//629 630//631 633//633 +f 630//631 631//632 634//635 +f 631//632 632//630 635//636 +f 641//638 644//644 640//639 +f 637//637 638//640 641//638 +f 643//643 642//641 638//640 +f 639//642 640//639 643//643 +f 644//644 641//638 648//646 +f 646//647 645//645 641//638 +f 642//641 643//643 646//647 +f 648//646 647//648 643//643 +f 649//649 652//652 648//646 +f 650//650 649//649 645//645 +f 651//651 650//650 646//647 +f 652//652 651//651 647//648 +f 652//652 649//649 656//654 +f 649//649 650//650 653//653 +f 650//650 651//651 654//655 +f 651//651 652//652 655//656 +f 656//654 653//653 660//658 +f 653//653 654//655 657//657 +f 654//655 655//656 658//659 +f 655//656 656//654 659//660 +f 660//658 657//657 664//662 +f 662//663 661//661 657//657 +f 658//659 659//660 662//663 +f 659//660 660//658 663//664 +f 665//665 668//668 664//662 +f 666//666 665//665 661//661 +f 667//667 666//666 662//663 +f 668//668 667//667 663//664 +f 669//669 672//672 668//668 +f 665//665 666//666 669//669 +f 671//671 670//670 666//666 +f 667//667 668//668 671//671 +f 672//672 669//669 676//674 +f 669//669 670//670 673//673 +f 670//670 671//671 674//675 +f 671//671 672//672 675//676 +f 676//674 673//673 680//678 +f 673//673 674//675 677//677 +f 674//675 675//676 678//679 +f 675//676 676//674 679//680 +f 685//682 688//688 684//683 +f 686//685 685//682 681//681 +f 687//687 686//685 682//684 +f 688//688 687//687 683//686 +f 688//688 685//682 692//690 +f 685//682 686//685 689//689 +f 686//685 687//687 690//691 +f 687//687 688//688 691//692 +f 692//690 689//689 696//694 +f 689//689 690//691 693//693 +f 690//691 691//692 694//695 +f 691//692 692//690 695//696 +f 696//694 693//693 700//698 +f 698//699 697//697 693//693 +f 694//695 695//696 698//699 +f 700//698 699//700 695//696 +f 701//701 704//704 700//698 +f 697//697 698//699 701//701 +f 703//703 702//702 698//699 +f 699//700 700//698 703//703 +f 705//705 708//708 704//704 +f 706//706 705//705 701//701 +f 707//707 706//706 702//702 +f 708//708 707//707 703//703 +f 708//708 705//705 712//710 +f 705//705 706//706 709//709 +f 706//706 707//707 710//711 +f 707//707 708//708 711//712 +f 713//713 716//716 712//710 +f 709//709 710//711 713//713 +f 715//715 714//714 710//711 +f 711//712 712//710 715//715 +f 716//716 713//713 720//718 +f 718//719 717//717 713//713 +f 714//714 715//715 718//719 +f 720//718 719//720 715//715 +f 720//718 717//717 724//722 +f 717//717 718//719 721//721 +f 718//719 719//720 722//723 +f 719//720 720//718 723//724 +f 728//732 725//725 732//727 +f 725//725 726//728 729//726 +f 726//728 727//730 730//729 +f 727//730 728//732 731//731 +f 732//727 729//726 736//734 +f 729//726 730//729 733//733 +f 730//729 731//731 734//735 +f 731//731 732//727 735//736 +f 737//737 740//740 736//734 +f 733//733 734//735 737//737 +f 739//739 738//738 734//735 +f 735//736 736//734 739//739 +f 740//740 737//737 744//742 +f 742//743 741//741 737//737 +f 738//738 739//739 742//743 +f 744//742 743//744 739//739 +f 744//742 741//741 748//746 +f 746//747 745//745 741//741 +f 747//748 746//747 742//743 +f 748//746 747//748 743//744 +f 749//749 752//752 748//746 +f 745//745 746//747 749//749 +f 751//751 750//750 746//747 +f 747//748 748//746 751//751 +f 753//753 756//756 752//752 +f 749//749 750//750 753//753 +f 755//755 754//754 750//750 +f 751//751 752//752 755//755 +f 756//756 753//753 760//758 +f 758//759 757//757 753//753 +f 754//754 755//755 758//759 +f 760//758 759//760 755//755 +f 761//761 764//764 760//758 +f 757//757 758//759 761//761 +f 763//763 762//762 758//759 +f 759//760 760//758 763//763 +f 764//764 761//761 768//766 +f 761//761 762//762 765//765 +f 762//762 763//763 766//767 +f 763//763 764//764 767//768 +f 773//770 776//776 772//771 +f 769//769 770//772 773//770 +f 775//775 774//773 770//772 +f 771//774 772//771 775//775 +f 776//776 773//770 780//778 +f 778//779 777//777 773//770 +f 774//773 775//775 778//779 +f 780//778 779//780 775//775 +f 781//781 784//784 780//778 +f 777//777 778//779 781//781 +f 783//783 782//782 778//779 +f 779//780 780//778 783//783 +f 785//785 788//788 784//784 +f 786//786 785//785 781//781 +f 787//787 786//786 782//782 +f 788//788 787//787 783//783 +f 788//788 785//785 792//790 +f 785//785 786//786 789//789 +f 786//786 787//787 790//791 +f 787//787 788//788 791//792 +f 792//790 789//789 796//794 +f 794//795 793//793 789//789 +f 790//791 791//792 794//795 +f 796//794 795//796 791//792 +f 797//797 800//800 796//794 +f 798//798 797//797 793//793 +f 799//799 798//798 794//795 +f 800//800 799//799 795//796 +f 800//800 797//797 804//802 +f 797//797 798//798 801//801 +f 798//798 799//799 802//803 +f 799//799 800//800 803//804 +f 805//805 808//808 804//802 +f 806//806 805//805 801//801 +f 807//807 806//806 802//803 +f 808//808 807//807 803//804 +f 808//808 805//805 812//810 +f 805//805 806//806 809//809 +f 806//806 807//807 810//811 +f 807//807 808//808 811//812 +f 817//814 820//820 816//815 +f 818//817 817//814 813//813 +f 819//819 818//817 814//816 +f 815//818 816//815 819//819 +f 820//820 817//814 824//822 +f 817//814 818//817 821//821 +f 818//817 819//819 822//823 +f 819//819 820//820 823//824 +f 825//825 828//828 824//822 +f 821//821 822//823 825//825 +f 827//827 826//826 822//823 +f 823//824 824//822 827//827 +f 828//828 825//825 832//830 +f 830//831 829//829 825//825 +f 826//826 827//827 830//831 +f 832//830 831//832 827//827 +f 832//830 829//829 836//834 +f 829//829 830//831 833//833 +f 830//831 831//832 834//835 +f 831//832 832//830 835//836 +f 836//834 833//833 840//838 +f 838//839 837//837 833//833 +f 834//835 835//836 838//839 +f 840//838 839//840 835//836 +f 841//841 844//844 840//838 +f 837//837 838//839 841//841 +f 843//843 842//842 838//839 +f 839//840 840//838 843//843 +f 845//845 848//848 844//844 +f 841//841 842//842 845//845 +f 847//847 846//846 842//842 +f 843//843 844//844 847//847 +f 848//848 845//845 852//850 +f 850//851 849//849 845//845 +f 846//846 847//847 850//851 +f 852//850 851//852 847//847 +f 852//850 849//849 856//854 +f 849//849 850//851 853//853 +f 850//851 851//852 854//855 +f 851//852 852//850 855//856 +f 860//864 857//857 864//859 +f 862//861 861//858 857//857 +f 858//860 859//862 862//861 +f 864//859 863//863 859//862 +f 865//865 868//868 864//859 +f 861//858 862//861 865//865 +f 867//867 866//866 862//861 +f 863//863 864//859 867//867 +f 869//869 872//872 868//868 +f 865//865 866//866 869//869 +f 871//871 870//870 866//866 +f 867//867 868//868 871//871 +f 873//873 876//876 872//872 +f 869//869 870//870 873//873 +f 875//875 874//874 870//870 +f 871//871 872//872 875//875 +f 877//877 880//880 876//876 +f 873//873 874//874 877//877 +f 879//879 878//878 874//874 +f 875//875 876//876 879//879 +f 880//880 877//877 884//882 +f 877//877 878//878 881//881 +f 878//878 879//879 882//883 +f 879//879 880//880 883//884 +f 884//882 881//881 888//886 +f 886//887 885//885 881//881 +f 882//883 883//884 886//887 +f 888//886 887//888 883//884 +f 889//889 892//892 888//886 +f 885//885 886//887 889//889 +f 891//891 890//890 886//887 +f 887//888 888//886 891//891 +f 892//892 889//889 896//894 +f 889//889 890//890 893//893 +f 890//890 891//891 894//895 +f 891//891 892//892 895//896 +f 896//894 893//893 900//898 +f 893//893 894//895 897//897 +f 894//895 895//896 898//899 +f 895//896 896//894 899//900 +f 904//908 901//901 908//903 +f 901//901 902//904 905//902 +f 902//904 903//906 906//905 +f 903//906 904//908 907//907 +f 908//903 905//902 912//910 +f 905//902 906//905 909//909 +f 906//905 907//907 910//911 +f 907//907 908//903 911//912 +f 913//913 916//916 912//910 +f 914//914 913//913 909//909 +f 915//915 914//914 910//911 +f 916//916 915//915 911//912 +f 916//916 913//913 920//918 +f 918//919 917//917 913//913 +f 914//914 915//915 918//919 +f 920//918 919//920 915//915 +f 921//921 924//924 920//918 +f 922//922 921//921 917//917 +f 923//923 922//922 918//919 +f 924//924 923//923 919//920 +f 924//924 921//921 928//926 +f 926//927 925//925 921//921 +f 922//922 923//923 926//927 +f 928//926 927//928 923//923 +f 929//929 932//932 928//926 +f 925//925 926//927 929//929 +f 931//931 930//930 926//927 +f 927//928 928//926 931//931 +f 933//933 936//936 932//932 +f 929//929 930//930 933//933 +f 935//935 934//934 930//930 +f 931//931 932//932 935//935 +f 936//936 933//933 940//938 +f 933//933 934//934 937//937 +f 934//934 935//935 938//939 +f 935//935 936//936 939//940 +f 940//938 937//937 944//942 +f 937//937 938//939 941//941 +f 938//939 939//940 942//943 +f 939//940 940//938 943//944 +f 949//946 952//952 948//947 +f 945//945 946//948 949//946 +f 951//951 950//949 946//948 +f 947//950 948//947 951//951 +f 952//952 949//946 956//954 +f 949//946 950//949 953//953 +f 950//949 951//951 954//955 +f 951//951 952//952 955//956 +f 957//957 960//960 956//954 +f 958//958 957//957 953//953 +f 959//959 958//958 954//955 +f 960//960 959//959 955//956 +f 960//960 957//957 964//962 +f 962//963 961//961 957//957 +f 958//958 959//959 962//963 +f 964//962 963//964 959//959 +f 964//962 961//961 968//966 +f 966//967 965//965 961//961 +f 962//963 963//964 966//967 +f 968//966 967//968 963//964 +f 969//969 972//972 968//966 +f 970//970 969//969 965//965 +f 971//971 970//970 966//967 +f 972//972 971//971 967//968 +f 972//972 969//969 976//974 +f 969//969 970//970 973//973 +f 970//970 971//971 974//975 +f 971//971 972//972 975//976 +f 976//974 973//973 980//978 +f 978//979 977//977 973//973 +f 974//975 975//976 978//979 +f 980//978 979//980 975//976 +f 981//981 984//984 980//978 +f 977//977 978//979 981//981 +f 983//983 982//982 978//979 +f 979//980 980//978 983//983 +f 984//984 981//981 988//986 +f 981//981 982//982 985//985 +f 982//982 983//983 986//987 +f 983//983 984//984 987//988 +f 993//990 996//996 992//991 +f 994//993 993//990 989//989 +f 995//995 994//993 990//992 +f 996//996 995//995 991//994 +f 997//997 1000//1000 996//996 +f 998//998 997//997 993//990 +f 999//999 998//998 994//993 +f 1000//1000 999//999 995//995 +f 1000//1000 997//997 1004//1002 +f 1002//1003 1001//1001 997//997 +f 998//998 999//999 1002//1003 +f 1004//1002 1003//1004 999//999 +f 1005//1005 1008//1008 1004//1002 +f 1001//1001 1002//1003 1005//1005 +f 1007//1007 1006//1006 1002//1003 +f 1003//1004 1004//1002 1007//1007 +f 1008//1008 1005//1005 1012//1010 +f 1005//1005 1006//1006 1009//1009 +f 1006//1006 1007//1007 1010//1011 +f 1007//1007 1008//1008 1011//1012 +f 1012//1010 1009//1009 1016//1014 +f 1009//1009 1010//1011 1013//1013 +f 1010//1011 1011//1012 1014//1015 +f 1011//1012 1012//1010 1015//1016 +f 1017//1017 1020//1020 1016//1014 +f 1013//1013 1014//1015 1017//1017 +f 1019//1019 1018//1018 1014//1015 +f 1015//1016 1016//1014 1019//1019 +f 1020//1020 1017//1017 1024//1022 +f 1017//1017 1018//1018 1021//1021 +f 1018//1018 1019//1019 1022//1023 +f 1019//1019 1020//1020 1023//1024 +f 1024//1022 1021//1021 1028//1026 +f 1021//1021 1022//1023 1025//1025 +f 1022//1023 1023//1024 1026//1027 +f 1023//1024 1024//1022 1027//1028 +f 1028//1026 1025//1025 1032//1030 +f 1025//1025 1026//1027 1029//1029 +f 1026//1027 1027//1028 1030//1031 +f 1027//1028 1028//1026 1031//1032 +f 1036//1040 1033//1033 1040//1035 +f 1038//1037 1037//1034 1033//1033 +f 1034//1036 1035//1038 1038//1037 +f 1040//1035 1039//1039 1035//1038 +f 1040//1035 1037//1034 1044//1042 +f 1042//1043 1041//1041 1037//1034 +f 1038//1037 1039//1039 1042//1043 +f 1044//1042 1043//1044 1039//1039 +f 1045//1045 1048//1048 1044//1042 +f 1041//1041 1042//1043 1045//1045 +f 1047//1047 1046//1046 1042//1043 +f 1043//1044 1044//1042 1047//1047 +f 1048//1048 1045//1045 1052//1050 +f 1045//1045 1046//1046 1049//1049 +f 1046//1046 1047//1047 1050//1051 +f 1047//1047 1048//1048 1051//1052 +f 1053//1053 1056//1056 1052//1050 +f 1049//1049 1050//1051 1053//1053 +f 1055//1055 1054//1054 1050//1051 +f 1051//1052 1052//1050 1055//1055 +f 1057//1057 1060//1060 1056//1056 +f 1053//1053 1054//1054 1057//1057 +f 1059//1059 1058//1058 1054//1054 +f 1055//1055 1056//1056 1059//1059 +f 1060//1060 1057//1057 1064//1062 +f 1062//1063 1061//1061 1057//1057 +f 1058//1058 1059//1059 1062//1063 +f 1064//1062 1063//1064 1059//1059 +f 1065//1065 1068//1068 1064//1062 +f 1066//1066 1065//1065 1061//1061 +f 1067//1067 1066//1066 1062//1063 +f 1068//1068 1067//1067 1063//1064 +f 1068//1068 1065//1065 1072//1070 +f 1065//1065 1066//1066 1069//1069 +f 1066//1066 1067//1067 1070//1071 +f 1067//1067 1068//1068 1071//1072 +f 1072//1070 1069//1069 1076//1074 +f 1069//1069 1070//1071 1073//1073 +f 1070//1071 1071//1072 1074//1075 +f 1071//1072 1072//1070 1075//1076 +f 1081//1078 1084//1084 1080//1079 +f 1082//1081 1081//1078 1077//1077 +f 1083//1083 1082//1081 1078//1080 +f 1084//1084 1083//1083 1079//1082 +f 1084//1084 1081//1078 1088//1086 +f 1081//1078 1082//1081 1085//1085 +f 1082//1081 1083//1083 1086//1087 +f 1083//1083 1084//1084 1087//1088 +f 1089//1089 1092//1092 1088//1086 +f 1085//1085 1086//1087 1089//1089 +f 1091//1091 1090//1090 1086//1087 +f 1087//1088 1088//1086 1091//1091 +f 1092//1092 1089//1089 1096//1094 +f 1094//1095 1093//1093 1089//1089 +f 1090//1090 1091//1091 1094//1095 +f 1096//1094 1095//1096 1091//1091 +f 1097//1097 1100//1100 1096//1094 +f 1093//1093 1094//1095 1097//1097 +f 1099//1099 1098//1098 1094//1095 +f 1095//1096 1096//1094 1099//1099 +f 1101//1101 1104//1104 1100//1100 +f 1102//1102 1101//1101 1097//1097 +f 1103//1103 1102//1102 1098//1098 +f 1104//1104 1103//1103 1099//1099 +f 1104//1104 1101//1101 1108//1106 +f 1106//1107 1105//1105 1101//1101 +f 1102//1102 1103//1103 1106//1107 +f 1108//1106 1107//1108 1103//1103 +f 1109//1109 1112//1112 1108//1106 +f 1110//1110 1109//1109 1105//1105 +f 1111//1111 1110//1110 1106//1107 +f 1112//1112 1111//1111 1107//1108 +f 1113//1113 1116//1116 1112//1112 +f 1109//1109 1110//1110 1113//1113 +f 1115//1115 1114//1114 1110//1110 +f 1111//1111 1112//1112 1115//1115 +f 1116//1116 1113//1113 1120//1118 +f 1113//1113 1114//1114 1117//1117 +f 1114//1114 1115//1115 1118//1119 +f 1115//1115 1116//1116 1119//1120 +f 1124//1128 1121//1121 1128//1123 +f 1121//1121 1122//1124 1125//1122 +f 1122//1124 1123//1126 1126//1125 +f 1123//1126 1124//1128 1127//1127 +f 1128//1123 1125//1122 1132//1130 +f 1125//1122 1126//1125 1129//1129 +f 1126//1125 1127//1127 1130//1131 +f 1127//1127 1128//1123 1131//1132 +f 1133//1133 1136//1136 1132//1130 +f 1134//1134 1133//1133 1129//1129 +f 1135//1135 1134//1134 1130//1131 +f 1136//1136 1135//1135 1131//1132 +f 1137//1137 1140//1140 1136//1136 +f 1133//1133 1134//1134 1137//1137 +f 1139//1139 1138//1138 1134//1134 +f 1135//1135 1136//1136 1139//1139 +f 1140//1140 1137//1137 1144//1142 +f 1142//1143 1141//1141 1137//1137 +f 1138//1138 1139//1139 1142//1143 +f 1144//1142 1143//1144 1139//1139 +f 1145//1145 1148//1148 1144//1142 +f 1141//1141 1142//1143 1145//1145 +f 1147//1147 1146//1146 1142//1143 +f 1143//1144 1144//1142 1147//1147 +f 1149//1149 1152//1152 1148//1148 +f 1145//1145 1146//1146 1149//1149 +f 1151//1151 1150//1150 1146//1146 +f 1147//1147 1148//1148 1151//1151 +f 1153//1153 1156//1156 1152//1152 +f 1149//1149 1150//1150 1153//1153 +f 1155//1155 1154//1154 1150//1150 +f 1151//1151 1152//1152 1155//1155 +f 1156//1156 1153//1153 1160//1158 +f 1158//1159 1157//1157 1153//1153 +f 1154//1154 1155//1155 1158//1159 +f 1160//1158 1159//1160 1155//1155 +f 1160//1158 1157//1157 1164//1162 +f 1157//1157 1158//1159 1161//1161 +f 1158//1159 1159//1160 1162//1163 +f 1159//1160 1160//1158 1163//1164 +f 1168//1172 1165//1165 1172//1167 +f 1170//1169 1169//1166 1165//1165 +f 1166//1168 1167//1170 1170//1169 +f 1172//1167 1171//1171 1167//1170 +f 1173//1173 1176//1176 1172//1167 +f 1169//1166 1170//1169 1173//1173 +f 1175//1175 1174//1174 1170//1169 +f 1171//1171 1172//1167 1175//1175 +f 1177//1177 1180//1180 1176//1176 +f 1178//1178 1177//1177 1173//1173 +f 1179//1179 1178//1178 1174//1174 +f 1180//1180 1179//1179 1175//1175 +f 1181//1181 1184//1184 1180//1180 +f 1177//1177 1178//1178 1181//1181 +f 1183//1183 1182//1182 1178//1178 +f 1179//1179 1180//1180 1183//1183 +f 1184//1184 1181//1181 1188//1186 +f 1181//1181 1182//1182 1185//1185 +f 1182//1182 1183//1183 1186//1187 +f 1183//1183 1184//1184 1187//1188 +f 1189//1189 1192//1192 1188//1186 +f 1185//1185 1186//1187 1189//1189 +f 1191//1191 1190//1190 1186//1187 +f 1187//1188 1188//1186 1191//1191 +f 1193//1193 1196//1196 1192//1192 +f 1189//1189 1190//1190 1193//1193 +f 1195//1195 1194//1194 1190//1190 +f 1191//1191 1192//1192 1195//1195 +f 1196//1196 1193//1193 1200//1198 +f 1193//1193 1194//1194 1197//1197 +f 1194//1194 1195//1195 1198//1199 +f 1195//1195 1196//1196 1199//1200 +f 1201//1201 1204//1204 1200//1198 +f 1202//1202 1201//1201 1197//1197 +f 1203//1203 1202//1202 1198//1199 +f 1204//1204 1203//1203 1199//1200 +f 1204//1204 1201//1201 1208//1206 +f 1201//1201 1202//1202 1205//1205 +f 1202//1202 1203//1203 1206//1207 +f 1203//1203 1204//1204 1207//1208 +f 1212//1216 1209//1209 1216//1211 +f 1214//1213 1213//1210 1209//1209 +f 1210//1212 1211//1214 1214//1213 +f 1216//1211 1215//1215 1211//1214 +f 1217//1217 1220//1220 1216//1211 +f 1213//1210 1214//1213 1217//1217 +f 1219//1219 1218//1218 1214//1213 +f 1215//1215 1216//1211 1219//1219 +f 1220//1220 1217//1217 1224//1222 +f 1222//1223 1221//1221 1217//1217 +f 1218//1218 1219//1219 1222//1223 +f 1224//1222 1223//1224 1219//1219 +f 1224//1222 1221//1221 1228//1226 +f 1221//1221 1222//1223 1225//1225 +f 1222//1223 1223//1224 1226//1227 +f 1223//1224 1224//1222 1227//1228 +f 1229//1229 1232//1232 1228//1226 +f 1230//1230 1229//1229 1225//1225 +f 1231//1231 1230//1230 1226//1227 +f 1232//1232 1231//1231 1227//1228 +f 1233//1233 1236//1236 1232//1232 +f 1229//1229 1230//1230 1233//1233 +f 1235//1235 1234//1234 1230//1230 +f 1231//1231 1232//1232 1235//1235 +f 1236//1236 1233//1233 1240//1238 +f 1238//1239 1237//1237 1233//1233 +f 1234//1234 1235//1235 1238//1239 +f 1240//1238 1239//1240 1235//1235 +f 1240//1238 1237//1237 1244//1242 +f 1237//1237 1238//1239 1241//1241 +f 1238//1239 1239//1240 1242//1243 +f 1239//1240 1240//1238 1243//1244 +f 1245//1245 1248//1248 1244//1242 +f 1246//1246 1245//1245 1241//1241 +f 1247//1247 1246//1246 1242//1243 +f 1248//1248 1247//1247 1243//1244 +f 1248//1248 1245//1245 1252//1250 +f 1245//1245 1246//1246 1249//1249 +f 1246//1246 1247//1247 1250//1251 +f 1247//1247 1248//1248 1251//1252 +f 1256//1260 1253//1253 1260//1255 +f 1253//1253 1254//1256 1257//1254 +f 1254//1256 1255//1258 1258//1257 +f 1255//1258 1256//1260 1259//1259 +f 1261//1261 1264//1264 1260//1255 +f 1262//1262 1261//1261 1257//1254 +f 1263//1263 1262//1262 1258//1257 +f 1264//1264 1263//1263 1259//1259 +f 1264//1264 1261//1261 1268//1266 +f 1266//1267 1265//1265 1261//1261 +f 1262//1262 1263//1263 1266//1267 +f 1268//1266 1267//1268 1263//1263 +f 1268//1266 1265//1265 1272//1270 +f 1265//1265 1266//1267 1269//1269 +f 1266//1267 1267//1268 1270//1271 +f 1267//1268 1268//1266 1271//1272 +f 1273//1273 1276//1276 1272//1270 +f 1274//1274 1273//1273 1269//1269 +f 1275//1275 1274//1274 1270//1271 +f 1276//1276 1275//1275 1271//1272 +f 1276//1276 1273//1273 1280//1278 +f 1273//1273 1274//1274 1277//1277 +f 1274//1274 1275//1275 1278//1279 +f 1275//1275 1276//1276 1279//1280 +f 1281//1281 1284//1284 1280//1278 +f 1282//1282 1281//1281 1277//1277 +f 1283//1283 1282//1282 1278//1279 +f 1284//1284 1283//1283 1279//1280 +f 1284//1284 1281//1281 1288//1286 +f 1281//1281 1282//1282 1285//1285 +f 1282//1282 1283//1283 1286//1287 +f 1283//1283 1284//1284 1287//1288 +f 1288//1286 1285//1285 1292//1290 +f 1290//1291 1289//1289 1285//1285 +f 1286//1287 1287//1288 1290//1291 +f 1292//1290 1291//1292 1287//1288 +f 1292//1290 1289//1289 1296//1294 +f 1289//1289 1290//1291 1293//1293 +f 1290//1291 1291//1292 1294//1295 +f 1291//1292 1292//1290 1295//1296 +f 1301//1298 1304//1304 1300//1299 +f 1302//1301 1301//1298 1297//1297 +f 1303//1303 1302//1301 1298//1300 +f 1304//1304 1303//1303 1299//1302 +f 1304//1304 1301//1298 1308//1306 +f 1301//1298 1302//1301 1305//1305 +f 1302//1301 1303//1303 1306//1307 +f 1303//1303 1304//1304 1307//1308 +f 1308//1306 1305//1305 1312//1310 +f 1305//1305 1306//1307 1309//1309 +f 1306//1307 1307//1308 1310//1311 +f 1307//1308 1308//1306 1311//1312 +f 1313//1313 1316//1316 1312//1310 +f 1309//1309 1310//1311 1313//1313 +f 1315//1315 1314//1314 1310//1311 +f 1311//1312 1312//1310 1315//1315 +f 1316//1316 1313//1313 1320//1318 +f 1313//1313 1314//1314 1317//1317 +f 1314//1314 1315//1315 1318//1319 +f 1315//1315 1316//1316 1319//1320 +f 1320//1318 1317//1317 1324//1322 +f 1322//1323 1321//1321 1317//1317 +f 1323//1324 1322//1323 1318//1319 +f 1324//1322 1323//1324 1319//1320 +f 1324//1322 1321//1321 1328//1326 +f 1326//1327 1325//1325 1321//1321 +f 1322//1323 1323//1324 1326//1327 +f 1328//1326 1327//1328 1323//1324 +f 1329//1329 1332//1332 1328//1326 +f 1325//1325 1326//1327 1329//1329 +f 1331//1331 1330//1330 1326//1327 +f 1327//1328 1328//1326 1331//1331 +f 1333//1333 1336//1336 1332//1332 +f 1329//1329 1330//1330 1333//1333 +f 1335//1335 1334//1334 1330//1330 +f 1331//1331 1332//1332 1335//1335 +f 1336//1336 1333//1333 1340//1338 +f 1333//1333 1334//1334 1337//1337 +f 1334//1334 1335//1335 1338//1339 +f 1335//1335 1336//1336 1339//1340 +f 1345//1342 1348//1348 1344//1343 +f 1346//1345 1345//1342 1341//1341 +f 1347//1347 1346//1345 1342//1344 +f 1348//1348 1347//1347 1343//1346 +f 1349//1349 1352//1352 1348//1348 +f 1350//1350 1349//1349 1345//1342 +f 1351//1351 1350//1350 1346//1345 +f 1352//1352 1351//1351 1347//1347 +f 1352//1352 1349//1349 1356//1354 +f 1354//1355 1353//1353 1349//1349 +f 1350//1350 1351//1351 1354//1355 +f 1356//1354 1355//1356 1351//1351 +f 1357//1357 1360//1360 1356//1354 +f 1353//1353 1354//1355 1357//1357 +f 1359//1359 1358//1358 1354//1355 +f 1355//1356 1356//1354 1359//1359 +f 1360//1360 1357//1357 1364//1362 +f 1357//1357 1358//1358 1361//1361 +f 1358//1358 1359//1359 1362//1363 +f 1359//1359 1360//1360 1363//1364 +f 1364//1362 1361//1361 1368//1366 +f 1361//1361 1362//1363 1365//1365 +f 1362//1363 1363//1364 1366//1367 +f 1363//1364 1364//1362 1367//1368 +f 1369//1369 1372//1372 1368//1366 +f 1365//1365 1366//1367 1369//1369 +f 1371//1371 1370//1370 1366//1367 +f 1367//1368 1368//1366 1371//1371 +f 1373//1373 1376//1376 1372//1372 +f 1374//1374 1373//1373 1369//1369 +f 1375//1375 1374//1374 1370//1370 +f 1376//1376 1375//1375 1371//1371 +f 1376//1376 1373//1373 1380//1378 +f 1373//1373 1374//1374 1377//1377 +f 1374//1374 1375//1375 1378//1379 +f 1375//1375 1376//1376 1379//1380 +f 1380//1378 1377//1377 1384//1382 +f 1377//1377 1378//1379 1381//1381 +f 1378//1379 1379//1380 1382//1383 +f 1379//1380 1380//1378 1383//1384 +f 1388//1392 1385//1385 1392//1387 +f 1385//1385 1386//1388 1389//1386 +f 1386//1388 1387//1390 1390//1389 +f 1387//1390 1388//1392 1391//1391 +f 1393//1393 1396//1396 1392//1387 +f 1394//1394 1393//1393 1389//1386 +f 1395//1395 1394//1394 1390//1389 +f 1396//1396 1395//1395 1391//1391 +f 1397//1397 1400//1400 1396//1396 +f 1398//1398 1397//1397 1393//1393 +f 1399//1399 1398//1398 1394//1394 +f 1400//1400 1399//1399 1395//1395 +f 1401//1401 1404//1404 1400//1400 +f 1397//1397 1398//1398 1401//1401 +f 1403//1403 1402//1402 1398//1398 +f 1399//1399 1400//1400 1403//1403 +f 1404//1404 1401//1401 1408//1406 +f 1406//1407 1405//1405 1401//1401 +f 1402//1402 1403//1403 1406//1407 +f 1408//1406 1407//1408 1403//1403 +f 1409//1409 1412//1412 1408//1406 +f 1410//1410 1409//1409 1405//1405 +f 1411//1411 1410//1410 1406//1407 +f 1412//1412 1411//1411 1407//1408 +f 1412//1412 1409//1409 1416//1414 +f 1409//1409 1410//1410 1413//1413 +f 1410//1410 1411//1411 1414//1415 +f 1411//1411 1412//1412 1415//1416 +f 1417//1417 1420//1420 1416//1414 +f 1418//1418 1417//1417 1413//1413 +f 1419//1419 1418//1418 1414//1415 +f 1420//1420 1419//1419 1415//1416 +f 1421//1421 1424//1424 1420//1420 +f 1417//1417 1418//1418 1421//1421 +f 1423//1423 1422//1422 1418//1418 +f 1419//1419 1420//1420 1423//1423 +f 1424//1424 1421//1421 1428//1426 +f 1421//1421 1422//1422 1425//1425 +f 1422//1422 1423//1423 1426//1427 +f 1423//1423 1424//1424 1427//1428 +f 1433//1430 1436//1436 1432//1431 +f 1434//1433 1433//1430 1429//1429 +f 1435//1435 1434//1433 1430//1432 +f 1436//1436 1435//1435 1431//1434 +f 1436//1436 1433//1430 1440//1438 +f 1433//1430 1434//1433 1437//1437 +f 1434//1433 1435//1435 1438//1439 +f 1435//1435 1436//1436 1439//1440 +f 1440//1438 1437//1437 1444//1442 +f 1437//1437 1438//1439 1441//1441 +f 1438//1439 1439//1440 1442//1443 +f 1439//1440 1440//1438 1443//1444 +f 1444//1442 1441//1441 1448//1446 +f 1441//1441 1442//1443 1445//1445 +f 1442//1443 1443//1444 1446//1447 +f 1443//1444 1444//1442 1447//1448 +f 1449//1449 1452//1452 1448//1446 +f 1450//1450 1449//1449 1445//1445 +f 1451//1451 1450//1450 1446//1447 +f 1452//1452 1451//1451 1447//1448 +f 1453//1453 1456//1456 1452//1452 +f 1454//1454 1453//1453 1449//1449 +f 1455//1455 1454//1454 1450//1450 +f 1456//1456 1455//1455 1451//1451 +f 1456//1456 1453//1453 1460//1458 +f 1453//1453 1454//1454 1457//1457 +f 1454//1454 1455//1455 1458//1459 +f 1455//1455 1456//1456 1459//1460 +f 1461//1461 1464//1464 1460//1458 +f 1462//1462 1461//1461 1457//1457 +f 1463//1463 1462//1462 1458//1459 +f 1464//1464 1463//1463 1459//1460 +f 1464//1464 1461//1461 1468//1466 +f 1461//1461 1462//1462 1465//1465 +f 1462//1462 1463//1463 1466//1467 +f 1463//1463 1464//1464 1467//1468 +f 1468//1466 1465//1465 1472//1470 +f 1465//1465 1466//1467 1469//1469 +f 1466//1467 1467//1468 1470//1471 +f 1467//1468 1468//1466 1471//1472 +f 1477//1474 1480//1480 1476//1475 +f 1478//1477 1477//1474 1473//1473 +f 1479//1479 1478//1477 1474//1476 +f 1480//1480 1479//1479 1475//1478 +f 1481//1481 1484//1484 1480//1480 +f 1482//1482 1481//1481 1477//1474 +f 1483//1483 1482//1482 1478//1477 +f 1484//1484 1483//1483 1479//1479 +f 1484//1484 1481//1481 1488//1486 +f 1481//1481 1482//1482 1485//1485 +f 1482//1482 1483//1483 1486//1487 +f 1483//1483 1484//1484 1487//1488 +f 1489//1489 1492//1492 1488//1486 +f 1485//1485 1486//1487 1489//1489 +f 1491//1491 1490//1490 1486//1487 +f 1487//1488 1488//1486 1491//1491 +f 1492//1492 1489//1489 1496//1494 +f 1494//1495 1493//1493 1489//1489 +f 1490//1490 1491//1491 1494//1495 +f 1496//1494 1495//1496 1491//1491 +f 1496//1494 1493//1493 1500//1498 +f 1498//1499 1497//1497 1493//1493 +f 1494//1495 1495//1496 1498//1499 +f 1500//1498 1499//1500 1495//1496 +f 1501//1501 1504//1504 1500//1498 +f 1497//1497 1498//1499 1501//1501 +f 1503//1503 1502//1502 1498//1499 +f 1499//1500 1500//1498 1503//1503 +f 1504//1504 1501//1501 1508//1506 +f 1506//1507 1505//1505 1501//1501 +f 1502//1502 1503//1503 1506//1507 +f 1508//1506 1507//1508 1503//1503 +f 1509//1509 1512//1512 1508//1506 +f 1505//1505 1506//1507 1509//1509 +f 1511//1511 1510//1510 1506//1507 +f 1507//1508 1508//1506 1511//1511 +f 1512//1512 1509//1509 1516//1514 +f 1509//1509 1510//1510 1513//1513 +f 1510//1510 1511//1511 1514//1515 +f 1511//1511 1512//1512 1515//1516 +f 1521//1518 1524//1524 1520//1519 +f 1517//1517 1518//1520 1521//1518 +f 1523//1523 1522//1521 1518//1520 +f 1519//1522 1520//1519 1523//1523 +f 1524//1524 1521//1518 1528//1526 +f 1526//1527 1525//1525 1521//1518 +f 1522//1521 1523//1523 1526//1527 +f 1528//1526 1527//1528 1523//1523 +f 1528//1526 1525//1525 1532//1530 +f 1525//1525 1526//1527 1529//1529 +f 1526//1527 1527//1528 1530//1531 +f 1527//1528 1528//1526 1531//1532 +f 1532//1530 1529//1529 1536//1534 +f 1534//1535 1533//1533 1529//1529 +f 1530//1531 1531//1532 1534//1535 +f 1536//1534 1535//1536 1531//1532 +f 1537//1537 1540//1540 1536//1534 +f 1538//1538 1537//1537 1533//1533 +f 1539//1539 1538//1538 1534//1535 +f 1540//1540 1539//1539 1535//1536 +f 1541//1541 1544//1544 1540//1540 +f 1537//1537 1538//1538 1541//1541 +f 1543//1543 1542//1542 1538//1538 +f 1539//1539 1540//1540 1543//1543 +f 1545//1545 1548//1548 1544//1544 +f 1541//1541 1542//1542 1545//1545 +f 1547//1547 1546//1546 1542//1542 +f 1543//1543 1544//1544 1547//1547 +f 1548//1548 1545//1545 1552//1550 +f 1550//1551 1549//1549 1545//1545 +f 1546//1546 1547//1547 1550//1551 +f 1552//1550 1551//1552 1547//1547 +f 1553//1553 1556//1556 1552//1550 +f 1549//1549 1550//1551 1553//1553 +f 1555//1555 1554//1554 1550//1551 +f 1551//1552 1552//1550 1555//1555 +f 1556//1556 1553//1553 1560//1558 +f 1553//1553 1554//1554 1557//1557 +f 1554//1554 1555//1555 1558//1559 +f 1555//1555 1556//1556 1559//1560 +f 1564//1568 1561//1561 1568//1563 +f 1561//1561 1562//1564 1565//1562 +f 1562//1564 1563//1566 1566//1565 +f 1563//1566 1564//1568 1567//1567 +f 1569//1569 1572//1572 1568//1563 +f 1570//1570 1569//1569 1565//1562 +f 1571//1571 1570//1570 1566//1565 +f 1572//1572 1571//1571 1567//1567 +f 1572//1572 1569//1569 1576//1574 +f 1569//1569 1570//1570 1573//1573 +f 1570//1570 1571//1571 1574//1575 +f 1571//1571 1572//1572 1575//1576 +f 1577//1577 1580//1580 1576//1574 +f 1573//1573 1574//1575 1577//1577 +f 1579//1579 1578//1578 1574//1575 +f 1575//1576 1576//1574 1579//1579 +f 1581//1581 1584//1584 1580//1580 +f 1582//1582 1581//1581 1577//1577 +f 1583//1583 1582//1582 1578//1578 +f 1584//1584 1583//1583 1579//1579 +f 1584//1584 1581//1581 1588//1586 +f 1581//1581 1582//1582 1585//1585 +f 1582//1582 1583//1583 1586//1587 +f 1583//1583 1584//1584 1587//1588 +f 1588//1586 1585//1585 1592//1590 +f 1590//1591 1589//1589 1585//1585 +f 1586//1587 1587//1588 1590//1591 +f 1592//1590 1591//1592 1587//1588 +f 1593//1593 1596//1596 1592//1590 +f 1589//1589 1590//1591 1593//1593 +f 1595//1595 1594//1594 1590//1591 +f 1591//1592 1592//1590 1595//1595 +f 1596//1596 1593//1593 1600//1598 +f 1593//1593 1594//1594 1597//1597 +f 1594//1594 1595//1595 1598//1599 +f 1595//1595 1596//1596 1599//1600 +f 1600//1598 1597//1597 1604//1602 +f 1597//1597 1598//1599 1601//1601 +f 1598//1599 1599//1600 1602//1603 +f 1599//1600 1600//1598 1603//1604 +f 1608//1612 1605//1605 1612//1607 +f 1610//1609 1609//1606 1605//1605 +f 1606//1608 1607//1610 1610//1609 +f 1612//1607 1611//1611 1607//1610 +f 1612//1607 1609//1606 1616//1614 +f 1609//1606 1610//1609 1613//1613 +f 1610//1609 1611//1611 1614//1615 +f 1611//1611 1612//1607 1615//1616 +f 1616//1614 1613//1613 1620//1618 +f 1618//1619 1617//1617 1613//1613 +f 1614//1615 1615//1616 1618//1619 +f 1620//1618 1619//1620 1615//1616 +f 1621//1621 1624//1624 1620//1618 +f 1617//1617 1618//1619 1621//1621 +f 1623//1623 1622//1622 1618//1619 +f 1619//1620 1620//1618 1623//1623 +f 1625//1625 1628//1628 1624//1624 +f 1621//1621 1622//1622 1625//1625 +f 1627//1627 1626//1626 1622//1622 +f 1623//1623 1624//1624 1627//1627 +f 1629//1629 1632//1632 1628//1628 +f 1630//1630 1629//1629 1625//1625 +f 1631//1631 1630//1630 1626//1626 +f 1632//1632 1631//1631 1627//1627 +f 1632//1632 1629//1629 1636//1634 +f 1634//1635 1633//1633 1629//1629 +f 1630//1630 1631//1631 1634//1635 +f 1636//1634 1635//1636 1631//1631 +f 1637//1637 1640//1640 1636//1634 +f 1638//1638 1637//1637 1633//1633 +f 1639//1639 1638//1638 1634//1635 +f 1640//1640 1639//1639 1635//1636 +f 1640//1640 1637//1637 1644//1642 +f 1637//1637 1638//1638 1641//1641 +f 1638//1638 1639//1639 1642//1643 +f 1639//1639 1640//1640 1643//1644 +f 1644//1642 1641//1641 1648//1646 +f 1641//1641 1642//1643 1645//1645 +f 1642//1643 1643//1644 1646//1647 +f 1643//1644 1644//1642 1647//1648 +f 1652//1656 1649//1649 1656//1651 +f 1654//1653 1653//1650 1649//1649 +f 1650//1652 1651//1654 1654//1653 +f 1656//1651 1655//1655 1651//1654 +f 1657//1657 1660//1660 1656//1651 +f 1653//1650 1654//1653 1657//1657 +f 1659//1659 1658//1658 1654//1653 +f 1655//1655 1656//1651 1659//1659 +f 1660//1660 1657//1657 1664//1662 +f 1662//1663 1661//1661 1657//1657 +f 1658//1658 1659//1659 1662//1663 +f 1664//1662 1663//1664 1659//1659 +f 1665//1665 1668//1668 1664//1662 +f 1666//1666 1665//1665 1661//1661 +f 1667//1667 1666//1666 1662//1663 +f 1668//1668 1667//1667 1663//1664 +f 1669//1669 1672//1672 1668//1668 +f 1665//1665 1666//1666 1669//1669 +f 1671//1671 1670//1670 1666//1666 +f 1667//1667 1668//1668 1671//1671 +f 1672//1672 1669//1669 1676//1674 +f 1669//1669 1670//1670 1673//1673 +f 1670//1670 1671//1671 1674//1675 +f 1671//1671 1672//1672 1675//1676 +f 1677//1677 1680//1680 1676//1674 +f 1673//1673 1674//1675 1677//1677 +f 1679//1679 1678//1678 1674//1675 +f 1675//1676 1676//1674 1679//1679 +f 1681//1681 1684//1684 1680//1680 +f 1682//1682 1681//1681 1677//1677 +f 1683//1683 1682//1682 1678//1678 +f 1684//1684 1683//1683 1679//1679 +f 1684//1684 1681//1681 1688//1686 +f 1686//1687 1685//1685 1681//1681 +f 1682//1682 1683//1683 1686//1687 +f 1688//1686 1687//1688 1683//1683 +f 1688//1686 1685//1685 1692//1690 +f 1685//1685 1686//1687 1689//1689 +f 1686//1687 1687//1688 1690//1691 +f 1687//1688 1688//1686 1691//1692 +f 1696//1700 1693//1693 1700//1695 +f 1698//1697 1697//1694 1693//1693 +f 1694//1696 1695//1698 1698//1697 +f 1700//1695 1699//1699 1695//1698 +f 1701//1701 1704//1704 1700//1695 +f 1697//1694 1698//1697 1701//1701 +f 1703//1703 1702//1702 1698//1697 +f 1699//1699 1700//1695 1703//1703 +f 1704//1704 1701//1701 1708//1706 +f 1701//1701 1702//1702 1705//1705 +f 1702//1702 1703//1703 1706//1707 +f 1703//1703 1704//1704 1707//1708 +f 1709//1709 1712//1712 1708//1706 +f 1710//1710 1709//1709 1705//1705 +f 1711//1711 1710//1710 1706//1707 +f 1712//1712 1711//1711 1707//1708 +f 1712//1712 1709//1709 1716//1714 +f 1714//1715 1713//1713 1709//1709 +f 1710//1710 1711//1711 1714//1715 +f 1716//1714 1715//1716 1711//1711 +f 1717//1717 1720//1720 1716//1714 +f 1713//1713 1714//1715 1717//1717 +f 1714//1715 1715//1716 1718//1718 +f 1715//1716 1716//1714 1719//1719 +f 1720//1720 1717//1717 1724//1722 +f 1722//1723 1721//1721 1717//1717 +f 1718//1718 1719//1719 1722//1723 +f 1724//1722 1723//1724 1719//1719 +f 1725//1725 1728//1728 1724//1722 +f 1721//1721 1722//1723 1725//1725 +f 1727//1727 1726//1726 1722//1723 +f 1723//1724 1724//1722 1727//1727 +f 1728//1728 1725//1725 1732//1730 +f 1725//1725 1726//1726 1729//1729 +f 1726//1726 1727//1727 1730//1731 +f 1727//1727 1728//1728 1731//1732 +f 1732//1730 1729//1729 1736//1734 +f 1729//1729 1730//1731 1733//1733 +f 1730//1731 1731//1732 1734//1735 +f 1731//1732 1732//1730 1735//1736 +f 1741//1738 1744//1744 1740//1739 +f 1737//1737 1738//1740 1741//1738 +f 1743//1743 1742//1741 1738//1740 +f 1739//1742 1740//1739 1743//1743 +f 1744//1744 1741//1738 1748//1746 +f 1746//1747 1745//1745 1741//1738 +f 1742//1741 1743//1743 1746//1747 +f 1748//1746 1747//1748 1743//1743 +f 1749//1749 1752//1752 1748//1746 +f 1745//1745 1746//1747 1749//1749 +f 1751//1751 1750//1750 1746//1747 +f 1747//1748 1748//1746 1751//1751 +f 1753//1753 1756//1756 1752//1752 +f 1754//1754 1753//1753 1749//1749 +f 1755//1755 1754//1754 1750//1750 +f 1756//1756 1755//1755 1751//1751 +f 1756//1756 1753//1753 1760//1758 +f 1758//1759 1757//1757 1753//1753 +f 1754//1754 1755//1755 1758//1759 +f 1760//1758 1759//1760 1755//1755 +f 1760//1758 1757//1757 1764//1762 +f 1757//1757 1758//1759 1761//1761 +f 1758//1759 1759//1760 1762//1763 +f 1759//1760 1760//1758 1763//1764 +f 1765//1765 1768//1768 1764//1762 +f 1766//1766 1765//1765 1761//1761 +f 1767//1767 1766//1766 1762//1763 +f 1768//1768 1767//1767 1763//1764 +f 1769//1769 1772//1772 1768//1768 +f 1765//1765 1766//1766 1769//1769 +f 1771//1771 1770//1770 1766//1766 +f 1767//1767 1768//1768 1771//1771 +f 1773//1773 1776//1776 1772//1772 +f 1774//1774 1773//1773 1769//1769 +f 1775//1775 1774//1774 1770//1770 +f 1776//1776 1775//1775 1771//1771 +f 1776//1776 1773//1773 1780//1778 +f 1773//1773 1774//1774 1777//1777 +f 1774//1774 1775//1775 1778//1779 +f 1775//1775 1776//1776 1779//1780 +f 1784//1788 1781//1781 1788//1783 +f 1781//1781 1782//1784 1785//1782 +f 1782//1784 1783//1786 1786//1785 +f 1783//1786 1784//1788 1787//1787 +f 1789//1789 1792//1792 1788//1783 +f 1790//1790 1789//1789 1785//1782 +f 1791//1791 1790//1790 1786//1785 +f 1792//1792 1791//1791 1787//1787 +f 1793//1793 1796//1796 1792//1792 +f 1789//1789 1790//1790 1793//1793 +f 1795//1795 1794//1794 1790//1790 +f 1791//1791 1792//1792 1795//1795 +f 1796//1796 1793//1793 1800//1798 +f 1793//1793 1794//1794 1797//1797 +f 1794//1794 1795//1795 1798//1799 +f 1795//1795 1796//1796 1799//1800 +f 1801//1801 1804//1804 1800//1798 +f 1797//1797 1798//1799 1801//1801 +f 1803//1803 1802//1802 1798//1799 +f 1799//1800 1800//1798 1803//1803 +f 1805//1805 1808//1808 1804//1804 +f 1806//1806 1805//1805 1801//1801 +f 1807//1807 1806//1806 1802//1802 +f 1808//1808 1807//1807 1803//1803 +f 1808//1808 1805//1805 1812//1810 +f 1805//1805 1806//1806 1809//1809 +f 1806//1806 1807//1807 1810//1811 +f 1807//1807 1808//1808 1811//1812 +f 1813//1813 1816//1816 1812//1810 +f 1814//1814 1813//1813 1809//1809 +f 1815//1815 1814//1814 1810//1811 +f 1816//1816 1815//1815 1811//1812 +f 1816//1816 1813//1813 1820//1818 +f 1813//1813 1814//1814 1817//1817 +f 1814//1814 1815//1815 1818//1819 +f 1815//1815 1816//1816 1819//1820 +f 1820//1818 1817//1817 1824//1822 +f 1817//1817 1818//1819 1821//1821 +f 1818//1819 1819//1820 1822//1823 +f 1819//1820 1820//1818 1823//1824 +f 1829//1826 1832//1832 1828//1827 +f 1825//1825 1826//1828 1829//1826 +f 1831//1831 1830//1829 1826//1828 +f 1827//1830 1828//1827 1831//1831 +f 1832//1832 1829//1826 1836//1834 +f 1834//1835 1833//1833 1829//1826 +f 1830//1829 1831//1831 1834//1835 +f 1836//1834 1835//1836 1831//1831 +f 1836//1834 1833//1833 1840//1838 +f 1838//1839 1837//1837 1833//1833 +f 1834//1835 1835//1836 1838//1839 +f 1840//1838 1839//1840 1835//1836 +f 1841//1841 1844//1844 1840//1838 +f 1837//1837 1838//1839 1841//1841 +f 1843//1843 1842//1842 1838//1839 +f 1839//1840 1840//1838 1843//1843 +f 1844//1844 1841//1841 1848//1846 +f 1846//1847 1845//1845 1841//1841 +f 1842//1842 1843//1843 1846//1847 +f 1848//1846 1847//1848 1843//1843 +f 1848//1846 1845//1845 1852//1850 +f 1850//1851 1849//1849 1845//1845 +f 1846//1847 1847//1848 1850//1851 +f 1852//1850 1851//1852 1847//1848 +f 1852//1850 1849//1849 1856//1854 +f 1849//1849 1850//1851 1853//1853 +f 1850//1851 1851//1852 1854//1855 +f 1851//1852 1852//1850 1855//1856 +f 1861//1858 1864//1864 1860//1859 +f 1862//1861 1861//1858 1857//1857 +f 1863//1863 1862//1861 1858//1860 +f 1864//1864 1863//1863 1859//1862 +f 1864//1864 1861//1858 1868//1866 +f 1861//1858 1862//1861 1865//1865 +f 1862//1861 1863//1863 1866//1867 +f 1863//1863 1864//1864 1867//1868 +f 1868//1866 1865//1865 1872//1870 +f 1870//1871 1869//1869 1865//1865 +f 1866//1867 1867//1868 1870//1871 +f 1872//1870 1871//1872 1867//1868 +f 1872//1870 1869//1869 1876//1874 +f 1869//1869 1870//1871 1873//1873 +f 1870//1871 1871//1872 1874//1875 +f 1871//1872 1872//1870 1875//1876 +f 1880//1884 1877//1877 1884//1879 +f 1877//1877 1878//1880 1881//1878 +f 1878//1880 1879//1882 1882//1881 +f 1879//1882 1880//1884 1883//1883 +f 1884//1879 1881//1878 1888//1886 +f 1881//1878 1882//1881 1885//1885 +f 1882//1881 1883//1883 1886//1887 +f 1883//1883 1884//1879 1887//1888 +f 1892//1896 1889//1889 1896//1891 +f 1889//1889 1890//1892 1893//1890 +f 1890//1892 1891//1894 1894//1893 +f 1891//1894 1892//1896 1895//1895 +f 1900//1904 1897//1897 1904//1899 +f 1897//1897 1898//1900 1901//1898 +f 1898//1900 1899//1902 1902//1901 +f 1899//1902 1900//1904 1903//1903 +f 1905//1905 1908//1908 1904//1899 +f 1906//1906 1905//1905 1901//1898 +f 1907//1907 1906//1906 1902//1901 +f 1908//1908 1907//1907 1903//1903 +f 1909//1909 1912//1912 1908//1908 +f 1910//1910 1909//1909 1905//1905 +f 1911//1911 1910//1910 1906//1906 +f 1912//1912 1911//1911 1907//1907 +f 1913//1913 1916//1916 1912//1912 +f 1914//1914 1913//1913 1909//1909 +f 1915//1915 1914//1914 1910//1910 +f 1916//1916 1915//1915 1911//1911 +f 1917//1917 1920//1920 1916//1916 +f 1918//1918 1917//1917 1913//1913 +f 1919//1919 1918//1918 1914//1914 +f 1920//1920 1919//1919 1915//1915 +f 1920//1920 1917//1917 1924//1922 +f 1917//1917 1918//1918 1921//1921 +f 1918//1918 1919//1919 1922//1923 +f 1919//1919 1920//1920 1923//1924 +f 1929//1926 1932//1932 1928//1927 +f 1930//1929 1929//1926 1925//1925 +f 1926//1928 1927//1930 1930//1929 +f 1932//1932 1931//1931 1927//1930 +f 1933//1933 1936//1936 1932//1932 +f 1929//1926 1930//1929 1933//1933 +f 1935//1935 1934//1934 1930//1929 +f 1931//1931 1932//1932 1935//1935 +f 1936//1936 1933//1933 1940//1938 +f 1933//1933 1934//1934 1937//1937 +f 1934//1934 1935//1935 1938//1939 +f 1935//1935 1936//1936 1939//1940 +f 1944//1948 1941//1941 1948//1943 +f 1941//1941 1942//1944 1945//1942 +f 1942//1944 1943//1946 1946//1945 +f 1943//1946 1944//1948 1947//1947 +f 1953//1950 1956//1956 1952//1951 +f 1954//1953 1953//1950 1949//1949 +f 1955//1955 1954//1953 1950//1952 +f 1956//1956 1955//1955 1951//1954 +f 1956//1956 1953//1950 1960//1958 +f 1953//1950 1954//1953 1957//1957 +f 1954//1953 1955//1955 1958//1959 +f 1955//1955 1956//1956 1959//1960 +f 1960//1958 1957//1957 1964//1962 +f 1957//1957 1958//1959 1961//1961 +f 1958//1959 1959//1960 1962//1963 +f 1959//1960 1960//1958 1963//1964 +f 1964//1962 1961//1961 1968//1966 +f 1961//1961 1962//1963 1965//1965 +f 1962//1963 1963//1964 1966//1967 +f 1963//1964 1964//1962 1967//1968 +f 1969//1969 1972//1972 1968//1966 +f 1970//1970 1969//1969 1965//1965 +f 1971//1971 1970//1970 1966//1967 +f 1972//1972 1971//1971 1967//1968 +f 1972//1972 1969//1969 1976//1974 +f 1969//1969 1970//1970 1973//1973 +f 1970//1970 1971//1971 1974//1975 +f 1971//1971 1972//1972 1975//1976 +f 1976//1974 1973//1973 1980//1978 +f 1973//1973 1974//1975 1977//1977 +f 1974//1975 1975//1976 1978//1979 +f 1975//1976 1976//1974 1979//1980 +f 1984//1988 1981//1981 1988//1983 +f 1981//1981 1982//1984 1985//1982 +f 1982//1984 1983//1986 1986//1985 +f 1983//1986 1984//1988 1987//1987 +f 1989//1989 1992//1992 1988//1983 +f 1990//1990 1989//1989 1985//1982 +f 1991//1991 1990//1990 1986//1985 +f 1992//1992 1991//1991 1987//1987 +f 1993//1993 1996//1996 1992//1992 +f 1989//1989 1990//1990 1993//1993 +f 1995//1995 1994//1994 1990//1990 +f 1991//1991 1992//1992 1995//1995 +f 1996//1996 1993//1993 2000//1998 +f 1993//1993 1994//1994 1997//1997 +f 1994//1994 1995//1995 1998//1999 +f 1995//1995 1996//1996 1999//2000 +f 2004//2008 2001//2001 2008//2003 +f 2001//2001 2002//2004 2005//2002 +f 2002//2004 2003//2006 2006//2005 +f 2003//2006 2004//2008 2007//2007 +f 2008//2003 2005//2002 2012//2010 +f 2005//2002 2006//2005 2009//2009 +f 2006//2005 2007//2007 2010//2011 +f 2007//2007 2008//2003 2011//2012 +f 2016//2020 2013//2013 2020//2015 +f 2013//2013 2014//2016 2017//2014 +f 2014//2016 2015//2018 2018//2017 +f 2015//2018 2016//2020 2019//2019 +f 2024//2028 2021//2021 2028//2023 +f 2026//2025 2025//2022 2021//2021 +f 2022//2024 2023//2026 2026//2025 +f 2028//2023 2027//2027 2023//2026 +f 2029//2029 2032//2032 2028//2023 +f 2025//2022 2026//2025 2029//2029 +f 2031//2031 2030//2030 2026//2025 +f 2027//2027 2028//2023 2031//2031 +f 2033//2033 2036//2036 2032//2032 +f 2029//2029 2030//2030 2033//2033 +f 2035//2035 2034//2034 2030//2030 +f 2031//2031 2032//2032 2035//2035 +f 2036//2036 2033//2033 2040//2038 +f 2038//2039 2037//2037 2033//2033 +f 2034//2034 2035//2035 2038//2039 +f 2040//2038 2039//2040 2035//2035 +f 2040//2038 2037//2037 2044//2042 +f 2042//2043 2041//2041 2037//2037 +f 2038//2039 2039//2040 2042//2043 +f 2044//2042 2043//2044 2039//2040 +f 2044//2042 2041//2041 2048//2046 +f 2041//2041 2042//2043 2045//2045 +f 2042//2043 2043//2044 2046//2047 +f 2043//2044 2044//2042 2047//2048 +f 2052//2056 2049//2049 2056//2051 +f 2049//2049 2050//2052 2053//2050 +f 2050//2052 2051//2054 2054//2053 +f 2051//2054 2052//2056 2055//2055 +f 2057//2057 2060//2060 2056//2051 +f 2058//2058 2057//2057 2053//2050 +f 2059//2059 2058//2058 2054//2053 +f 2060//2060 2059//2059 2055//2055 +f 2060//2060 2057//2057 2064//2062 +f 2057//2057 2058//2058 2061//2061 +f 2058//2058 2059//2059 2062//2063 +f 2059//2059 2060//2060 2063//2064 +f 2068//2072 2065//2065 2072//2067 +f 2065//2065 2066//2068 2069//2066 +f 2066//2068 2067//2070 2070//2069 +f 2067//2070 2068//2072 2071//2071 +f 2076//2080 2073//2073 2080//2075 +f 2073//2073 2074//2076 2077//2074 +f 2074//2076 2075//2078 2078//2077 +f 2075//2078 2076//2080 2079//2079 +f 2081//2081 2084//2084 2080//2075 +f 2082//2082 2081//2081 2077//2074 +f 2083//2083 2082//2082 2078//2077 +f 2084//2084 2083//2083 2079//2079 +f 2084//2084 2081//2081 2088//2086 +f 2086//2087 2085//2085 2081//2081 +f 2082//2082 2083//2083 2086//2087 +f 2088//2086 2087//2088 2083//2083 +f 2089//2089 2092//2092 2088//2086 +f 2085//2085 2086//2087 2089//2089 +f 2091//2091 2090//2090 2086//2087 +f 2087//2088 2088//2086 2091//2091 +f 2093//2093 2096//2096 2092//2092 +f 2089//2089 2090//2090 2093//2093 +f 2095//2095 2094//2094 2090//2090 +f 2091//2091 2092//2092 2095//2095 +f 2096//2096 2093//2093 2100//2098 +f 2098//2099 2097//2097 2093//2093 +f 2094//2094 2095//2095 2098//2099 +f 2100//2098 2099//2100 2095//2095 +f 2100//2098 2097//2097 2104//2102 +f 2097//2097 2098//2099 2101//2101 +f 2098//2099 2099//2100 2102//2103 +f 2099//2100 2100//2098 2103//2104 +f 2108//2112 2105//2105 2112//2107 +f 2105//2105 2106//2108 2109//2106 +f 2106//2108 2107//2110 2110//2109 +f 2107//2110 2108//2112 2111//2111 +f 2113//2113 2116//2116 2112//2107 +f 2114//2114 2113//2113 2109//2106 +f 2115//2115 2114//2114 2110//2109 +f 2116//2116 2115//2115 2111//2111 +f 2117//2117 2120//2120 2116//2116 +f 2118//2118 2117//2117 2113//2113 +f 2119//2119 2118//2118 2114//2114 +f 2120//2120 2119//2119 2115//2115 +f 2120//2120 2117//2117 2124//2122 +f 2117//2117 2118//2118 2121//2121 +f 2118//2118 2119//2119 2122//2123 +f 2119//2119 2120//2120 2123//2124 +f 2129//2126 2132//2132 2128//2127 +f 2125//2125 2126//2128 2129//2126 +f 2131//2131 2130//2129 2126//2128 +f 2127//2130 2128//2127 2131//2131 +f 2132//2132 2129//2126 2136//2134 +f 2129//2126 2130//2129 2133//2133 +f 2130//2129 2131//2131 2134//2135 +f 2131//2131 2132//2132 2135//2136 +f 2140//2144 2137//2137 2144//2139 +f 2137//2137 2138//2140 2141//2138 +f 2138//2140 2139//2142 2142//2141 +f 2139//2142 2140//2144 2143//2143 +f 2149//2146 2152//2152 2148//2147 +f 2150//2149 2149//2146 2145//2145 +f 2151//2151 2150//2149 2146//2148 +f 2152//2152 2151//2151 2147//2150 +f 2153//2153 2156//2156 2152//2152 +f 2154//2154 2153//2153 2149//2146 +f 2155//2155 2154//2154 2150//2149 +f 2156//2156 2155//2155 2151//2151 +f 2156//2156 2153//2153 2160//2158 +f 2153//2153 2154//2154 2157//2157 +f 2154//2154 2155//2155 2158//2159 +f 2155//2155 2156//2156 2159//2160 +f 2161//2161 2164//2164 2160//2158 +f 2162//2162 2161//2161 2157//2157 +f 2163//2163 2162//2162 2158//2159 +f 2164//2164 2163//2163 2159//2160 +f 2164//2164 2161//2161 2168//2166 +f 2161//2161 2162//2162 2165//2165 +f 2162//2162 2163//2163 2166//2167 +f 2163//2163 2164//2164 2167//2168 +f 2168//2166 2165//2165 2172//2170 +f 2165//2165 2166//2167 2169//2169 +f 2166//2167 2167//2168 2170//2171 +f 2167//2168 2168//2166 2171//2172 +f 2176//2180 2173//2173 2180//2175 +f 2173//2173 2174//2176 2177//2174 +f 2174//2176 2175//2178 2178//2177 +f 2175//2178 2176//2180 2179//2179 +f 2181//2181 2184//2184 2180//2175 +f 2182//2182 2181//2181 2177//2174 +f 2183//2183 2182//2182 2178//2177 +f 2184//2184 2183//2183 2179//2179 +f 2184//2184 2181//2181 2188//2186 +f 2181//2181 2182//2182 2185//2185 +f 2182//2182 2183//2183 2186//2187 +f 2183//2183 2184//2184 2187//2188 +f 2192//2196 2189//2189 2196//2191 +f 2189//2189 2190//2192 2193//2190 +f 2190//2192 2191//2194 2194//2193 +f 2191//2194 2192//2196 2195//2195 +f 2201//2198 2204//2204 2200//2199 +f 2202//2201 2201//2198 2197//2197 +f 2203//2203 2202//2201 2198//2200 +f 2204//2204 2203//2203 2199//2202 +f 2204//2204 2201//2198 2208//2206 +f 2201//2198 2202//2201 2205//2205 +f 2202//2201 2203//2203 2206//2207 +f 2203//2203 2204//2204 2207//2208 +f 2209//2209 2212//2212 2208//2206 +f 2210//2210 2209//2209 2205//2205 +f 2211//2211 2210//2210 2206//2207 +f 2212//2212 2211//2211 2207//2208 +f 2213//2213 2216//2216 2212//2212 +f 2214//2214 2213//2213 2209//2209 +f 2215//2215 2214//2214 2210//2210 +f 2216//2216 2215//2215 2211//2211 +f 2216//2216 2213//2213 2220//2218 +f 2213//2213 2214//2214 2217//2217 +f 2214//2214 2215//2215 2218//2219 +f 2215//2215 2216//2216 2219//2220 +f 2221//2221 2224//2224 2220//2218 +f 2222//2222 2221//2221 2217//2217 +f 2223//2223 2222//2222 2218//2219 +f 2224//2224 2223//2223 2219//2220 +f 2224//2224 2221//2221 2228//2226 +f 2221//2221 2222//2222 2225//2225 +f 2222//2222 2223//2223 2226//2227 +f 2223//2223 2224//2224 2227//2228 +f 2232//2236 2229//2229 2236//2231 +f 2229//2229 2230//2232 2233//2230 +f 2230//2232 2231//2234 2234//2233 +f 2231//2234 2232//2236 2235//2235 +f 2237//2237 2240//2240 2236//2231 +f 2238//2238 2237//2237 2233//2230 +f 2239//2239 2238//2238 2234//2233 +f 2240//2240 2239//2239 2235//2235 +f 2241//2241 2244//2244 2240//2240 +f 2237//2237 2238//2238 2241//2241 +f 2243//2243 2242//2242 2238//2238 +f 2239//2239 2240//2240 2243//2243 +f 2244//2244 2241//2241 2248//2246 +f 2241//2241 2242//2242 2245//2245 +f 2242//2242 2243//2243 2246//2247 +f 2243//2243 2244//2244 2247//2248 +f 2253//2250 2256//2256 2252//2251 +f 2254//2253 2253//2250 2249//2249 +f 2255//2255 2254//2253 2250//2252 +f 2256//2256 2255//2255 2251//2254 +f 2256//2256 2253//2250 2260//2258 +f 2253//2250 2254//2253 2257//2257 +f 2254//2253 2255//2255 2258//2259 +f 2255//2255 2256//2256 2259//2260 +f 2264//2268 2261//2261 2268//2263 +f 2261//2261 2262//2264 2265//2262 +f 2262//2264 2263//2266 2266//2265 +f 2263//2266 2264//2268 2267//2267 +f 2272//2276 2269//2269 2276//2271 +f 2269//2269 2270//2272 2273//2270 +f 2270//2272 2271//2274 2274//2273 +f 2271//2274 2272//2276 2275//2275 +f 2276//2271 2273//2270 2280//2278 +f 2273//2270 2274//2273 2277//2277 +f 2274//2273 2275//2275 2278//2279 +f 2275//2275 2276//2271 2279//2280 +f 2281//2281 2284//2284 2280//2278 +f 2282//2282 2281//2281 2277//2277 +f 2283//2283 2282//2282 2278//2279 +f 2284//2284 2283//2283 2279//2280 +f 2285//2285 2288//2288 2284//2284 +f 2286//2286 2285//2285 2281//2281 +f 2287//2287 2286//2286 2282//2282 +f 2288//2288 2287//2287 2283//2283 +f 2289//2289 2292//2292 2288//2288 +f 2290//2290 2289//2289 2285//2285 +f 2291//2291 2290//2290 2286//2286 +f 2292//2292 2291//2291 2287//2287 +f 2292//2292 2289//2289 2296//2294 +f 2289//2289 2290//2290 2293//2293 +f 2290//2290 2291//2291 2294//2295 +f 2291//2291 2292//2292 2295//2296 +f 2300//2304 2297//2297 2304//2299 +f 2297//2297 2298//2300 2301//2298 +f 2298//2300 2299//2302 2302//2301 +f 2299//2302 2300//2304 2303//2303 +f 2304//2299 2301//2298 2308//2306 +f 2301//2298 2302//2301 2305//2305 +f 2302//2301 2303//2303 2306//2307 +f 2303//2303 2304//2299 2307//2308 +f 2308//2306 2305//2305 2312//2310 +f 2305//2305 2306//2307 2309//2309 +f 2306//2307 2307//2308 2310//2311 +f 2307//2308 2308//2306 2311//2312 +f 2316//2320 2313//2313 2320//2315 +f 2313//2313 2314//2316 2317//2314 +f 2314//2316 2315//2318 2318//2317 +f 2315//2318 2316//2320 2319//2319 +f 2324//2328 2321//2321 2328//2323 +f 2321//2321 2322//2324 2325//2322 +f 2322//2324 2323//2326 2326//2325 +f 2323//2326 2324//2328 2327//2327 +f 2329//2329 2332//2332 2328//2323 +f 2330//2330 2329//2329 2325//2322 +f 2331//2331 2330//2330 2326//2325 +f 2332//2332 2331//2331 2327//2327 +f 2333//2333 2336//2336 2332//2332 +f 2334//2334 2333//2333 2329//2329 +f 2335//2335 2334//2334 2330//2330 +f 2336//2336 2335//2335 2331//2331 +f 2336//2336 2333//2333 2340//2338 +f 2333//2333 2334//2334 2337//2337 +f 2334//2334 2335//2335 2338//2339 +f 2335//2335 2336//2336 2339//2340 +f 2341//2341 2344//2344 2340//2338 +f 2342//2342 2341//2341 2337//2337 +f 2343//2343 2342//2342 2338//2339 +f 2344//2344 2343//2343 2339//2340 +f 2344//2344 2341//2341 2348//2346 +f 2341//2341 2342//2342 2345//2345 +f 2342//2342 2343//2343 2346//2347 +f 2348//2346 2347//2348 2343//2343 +f 2348//2346 2345//2345 2352//2350 +f 2345//2345 2346//2347 2349//2349 +f 2346//2347 2347//2348 2350//2351 +f 2347//2348 2348//2346 2351//2352 +f 2357//2354 2360//2360 2356//2355 +f 2358//2357 2357//2354 2353//2353 +f 2359//2359 2358//2357 2354//2356 +f 2360//2360 2359//2359 2355//2358 +f 2361//2361 2364//2364 2360//2360 +f 2362//2362 2361//2361 2357//2354 +f 2363//2363 2362//2362 2358//2357 +f 2364//2364 2363//2363 2359//2359 +f 2365//2365 2368//2368 2364//2364 +f 2361//2361 2362//2362 2365//2365 +f 2367//2367 2366//2366 2362//2362 +f 2363//2363 2364//2364 2367//2367 +f 2368//2368 2365//2365 2372//2370 +f 2365//2365 2366//2366 2369//2369 +f 2366//2366 2367//2367 2370//2371 +f 2367//2367 2368//2368 2371//2372 +f 2376//2380 2373//2373 2380//2375 +f 2378//2377 2377//2374 2373//2373 +f 2374//2376 2375//2378 2378//2377 +f 2380//2375 2379//2379 2375//2378 +f 2380//2375 2377//2374 2384//2382 +f 2377//2374 2378//2377 2381//2381 +f 2378//2377 2379//2379 2382//2383 +f 2379//2379 2380//2375 2383//2384 +f 2388//2392 2385//2385 2392//2387 +f 2385//2385 2386//2388 2389//2386 +f 2386//2388 2387//2390 2390//2389 +f 2387//2390 2388//2392 2391//2391 +f 2397//2394 2400//2400 2396//2395 +f 2398//2397 2397//2394 2393//2393 +f 2399//2399 2398//2397 2394//2396 +f 2400//2400 2399//2399 2395//2398 +f 2400//2400 2397//2394 2404//2402 +f 2397//2394 2398//2397 2401//2401 +f 2398//2397 2399//2399 2402//2403 +f 2399//2399 2400//2400 2403//2404 +f 2405//2405 2408//2408 2404//2402 +f 2406//2406 2405//2405 2401//2401 +f 2407//2407 2406//2406 2402//2403 +f 2408//2408 2407//2407 2403//2404 +f 2408//2408 2405//2405 2412//2410 +f 2405//2405 2406//2406 2409//2409 +f 2406//2406 2407//2407 2410//2411 +f 2407//2407 2408//2408 2411//2412 +f 2413//2413 2416//2416 2412//2410 +f 2414//2414 2413//2413 2409//2409 +f 2415//2415 2414//2414 2410//2411 +f 2416//2416 2415//2415 2411//2412 +f 2416//2416 2413//2413 2420//2418 +f 2413//2413 2414//2414 2417//2417 +f 2414//2414 2415//2415 2418//2419 +f 2415//2415 2416//2416 2419//2420 +f 2424//2428 2421//2421 2428//2423 +f 2421//2421 2422//2424 2425//2422 +f 2422//2424 2423//2426 2426//2425 +f 2423//2426 2424//2428 2427//2427 +f 2429//2429 2432//2432 2428//2423 +f 2425//2422 2426//2425 2429//2429 +f 2431//2431 2430//2430 2426//2425 +f 2427//2427 2428//2423 2431//2431 +f 2432//2432 2429//2429 2436//2434 +f 2429//2429 2430//2430 2433//2433 +f 2430//2430 2431//2431 2434//2435 +f 2431//2431 2432//2432 2435//2436 +f 2440//2444 2437//2437 2444//2439 +f 2437//2437 2438//2440 2441//2438 +f 2438//2440 2439//2442 2442//2441 +f 2439//2442 2440//2444 2443//2443 +f 2449//2446 2452//2452 2448//2447 +f 2450//2449 2449//2446 2445//2445 +f 2451//2451 2450//2449 2446//2448 +f 2452//2452 2451//2451 2447//2450 +f 2452//2452 2449//2446 2456//2454 +f 2449//2446 2450//2449 2453//2453 +f 2450//2449 2451//2451 2454//2455 +f 2451//2451 2452//2452 2455//2456 +f 2457//2457 2460//2460 2456//2454 +f 2458//2458 2457//2457 2453//2453 +f 2459//2459 2458//2458 2454//2455 +f 2460//2460 2459//2459 2455//2456 +f 2460//2460 2457//2457 2464//2462 +f 2457//2457 2458//2458 2461//2461 +f 2458//2458 2459//2459 2462//2463 +f 2459//2459 2460//2460 2463//2464 +f 2465//2465 2468//2468 2464//2462 +f 2466//2466 2465//2465 2461//2461 +f 2467//2467 2466//2466 2462//2463 +f 2468//2468 2467//2467 2463//2464 +f 2468//2468 2465//2465 2472//2470 +f 2465//2465 2466//2466 2469//2469 +f 2466//2466 2467//2467 2470//2471 +f 2467//2467 2468//2468 2471//2472 +f 2472//2470 2469//2469 2476//2474 +f 2469//2469 2470//2471 2473//2473 +f 2470//2471 2471//2472 2474//2475 +f 2471//2472 2472//2470 2475//2476 +f 2480//2484 2477//2477 2484//2479 +f 2477//2477 2478//2480 2481//2478 +f 2478//2480 2479//2482 2482//2481 +f 2479//2482 2480//2484 2483//2483 +f 2485//2485 2488//2488 2484//2479 +f 2486//2486 2485//2485 2481//2478 +f 2487//2487 2486//2486 2482//2481 +f 2488//2488 2487//2487 2483//2483 +f 2488//2488 2485//2485 2492//2490 +f 2490//2491 2489//2489 2485//2485 +f 2486//2486 2487//2487 2490//2491 +f 2492//2490 2491//2492 2487//2487 +f 2492//2490 2489//2489 2496//2494 +f 2489//2489 2490//2491 2493//2493 +f 2490//2491 2491//2492 2494//2495 +f 2491//2492 2492//2490 2495//2496 +f 2500//2504 2497//2497 2504//2499 +f 2497//2497 2498//2500 2501//2498 +f 2498//2500 2499//2502 2502//2501 +f 2499//2502 2500//2504 2503//2503 +f 2504//2499 2501//2498 2508//2506 +f 2501//2498 2502//2501 2505//2505 +f 2502//2501 2503//2503 2506//2507 +f 2503//2503 2504//2499 2507//2508 +f 2512//2516 2509//2509 2516//2511 +f 2509//2509 2510//2512 2513//2510 +f 2510//2512 2511//2514 2514//2513 +f 2511//2514 2512//2516 2515//2515 +f 2520//2524 2517//2517 2524//2519 +f 2517//2517 2518//2520 2521//2518 +f 2518//2520 2519//2522 2522//2521 +f 2519//2522 2520//2524 2523//2523 +f 2524//2519 2521//2518 2528//2526 +f 2521//2518 2522//2521 2525//2525 +f 2522//2521 2523//2523 2526//2527 +f 2523//2523 2524//2519 2527//2528 +f 2529//2529 2532//2532 2528//2526 +f 2530//2530 2529//2529 2525//2525 +f 2531//2531 2530//2530 2526//2527 +f 2532//2532 2531//2531 2527//2528 +f 2532//2532 2529//2529 2536//2534 +f 2529//2529 2530//2530 2533//2533 +f 2530//2530 2531//2531 2534//2535 +f 2531//2531 2532//2532 2535//2536 +f 2537//2537 2540//2540 2536//2534 +f 2538//2538 2537//2537 2533//2533 +f 2539//2539 2538//2538 2534//2535 +f 2540//2540 2539//2539 2535//2536 +f 2540//2540 2537//2537 2544//2542 +f 2537//2537 2538//2538 2541//2541 +f 2538//2538 2539//2539 2542//2543 +f 2539//2539 2540//2540 2543//2544 +f 2549//2546 2552//2552 2548//2547 +f 2550//2549 2549//2546 2545//2545 +f 2551//2551 2550//2549 2546//2548 +f 2552//2552 2551//2551 2547//2550 +f 2552//2552 2549//2546 2556//2554 +f 2549//2546 2550//2549 2553//2553 +f 2550//2549 2551//2551 2554//2555 +f 2556//2554 2555//2556 2551//2551 +f 2556//2554 2553//2553 2560//2558 +f 2553//2553 2554//2555 2557//2557 +f 2554//2555 2555//2556 2558//2559 +f 2555//2556 2556//2554 2559//2560 +f 2564//2568 2561//2561 2568//2563 +f 2561//2561 2562//2564 2565//2562 +f 2562//2564 2563//2566 2566//2565 +f 2563//2566 2564//2568 2567//2567 +f 2572//2576 2569//2569 2576//2571 +f 2569//2569 2570//2572 2573//2570 +f 2570//2572 2571//2574 2574//2573 +f 2571//2574 2572//2576 2575//2575 +f 2577//2577 2580//2580 2576//2571 +f 2578//2578 2577//2577 2573//2570 +f 2579//2579 2578//2578 2574//2573 +f 2580//2580 2579//2579 2575//2575 +f 2580//2580 2577//2577 2584//2582 +f 2577//2577 2578//2578 2581//2581 +f 2578//2578 2579//2579 2582//2583 +f 2579//2579 2580//2580 2583//2584 +f 2585//2585 2588//2588 2584//2582 +f 2586//2586 2585//2585 2581//2581 +f 2587//2587 2586//2586 2582//2583 +f 2588//2588 2587//2587 2583//2584 +f 2588//2588 2585//2585 2592//2590 +f 2585//2585 2586//2586 2589//2589 +f 2586//2586 2587//2587 2590//2591 +f 2587//2587 2588//2588 2591//2592 +f 2592//2590 2589//2589 2596//2594 +f 2589//2589 2590//2591 2593//2593 +f 2590//2591 2591//2592 2594//2595 +f 2591//2592 2592//2590 2595//2596 +f 2596//2594 2593//2593 2600//2598 +f 2593//2593 2594//2595 2597//2597 +f 2594//2595 2595//2596 2598//2599 +f 2595//2596 2596//2594 2599//2600 +f 2605//2602 2608//2608 2604//2603 +f 2606//2605 2605//2602 2601//2601 +f 2607//2607 2606//2605 2602//2604 +f 2608//2608 2607//2607 2603//2606 +f 2609//2609 2612//2612 2608//2608 +f 2610//2610 2609//2609 2605//2602 +f 2611//2611 2610//2610 2606//2605 +f 2612//2612 2611//2611 2607//2607 +f 2613//2613 2616//2616 2612//2612 +f 2609//2609 2610//2610 2613//2613 +f 2615//2615 2614//2614 2610//2610 +f 2611//2611 2612//2612 2615//2615 +f 2616//2616 2613//2613 2620//2618 +f 2613//2613 2614//2614 2617//2617 +f 2614//2614 2615//2615 2618//2619 +f 2615//2615 2616//2616 2619//2620 +f 2624//2628 2621//2621 2628//2623 +f 2626//2625 2625//2622 2621//2621 +f 2622//2624 2623//2626 2626//2625 +f 2628//2623 2627//2627 2623//2626 +f 2628//2623 2625//2622 2632//2630 +f 2625//2622 2626//2625 2629//2629 +f 2626//2625 2627//2627 2630//2631 +f 2627//2627 2628//2623 2631//2632 +f 2636//2640 2633//2633 2640//2635 +f 2633//2633 2634//2636 2637//2634 +f 2634//2636 2635//2638 2638//2637 +f 2635//2638 2636//2640 2639//2639 +f 2645//2642 2648//2648 2644//2643 +f 2646//2645 2645//2642 2641//2641 +f 2642//2644 2643//2646 2646//2645 +f 2648//2648 2647//2647 2643//2646 +f 2649//2649 2652//2652 2648//2648 +f 2645//2642 2646//2645 2649//2649 +f 2651//2651 2650//2650 2646//2645 +f 2647//2647 2648//2648 2651//2651 +f 2653//2653 2656//2656 2652//2652 +f 2649//2649 2650//2650 2653//2653 +f 2655//2655 2654//2654 2650//2650 +f 2651//2651 2652//2652 2655//2655 +f 2657//2657 2660//2660 2656//2656 +f 2653//2653 2654//2654 2657//2657 +f 2659//2659 2658//2658 2654//2654 +f 2655//2655 2656//2656 2659//2659 +f 2660//2660 2657//2657 2664//2662 +f 2662//2663 2661//2661 2657//2657 +f 2658//2658 2659//2659 2662//2663 +f 2664//2662 2663//2664 2659//2659 +f 2664//2662 2661//2661 2668//2666 +f 2661//2661 2662//2663 2665//2665 +f 2662//2663 2663//2664 2666//2667 +f 2663//2664 2664//2662 2667//2668 +f 2673//2670 2676//2676 2672//2671 +f 2669//2669 2670//2672 2673//2670 +f 2675//2675 2674//2673 2670//2672 +f 2671//2674 2672//2671 2675//2675 +f 2677//2677 2680//2680 2676//2676 +f 2673//2670 2674//2673 2677//2677 +f 2679//2679 2678//2678 2674//2673 +f 2675//2675 2676//2676 2679//2679 +f 2680//2680 2677//2677 2684//2682 +f 2677//2677 2678//2678 2681//2681 +f 2678//2678 2679//2679 2682//2683 +f 2679//2679 2680//2680 2683//2684 +f 2688//2692 2685//2685 2692//2687 +f 2685//2685 2686//2688 2689//2686 +f 2686//2688 2687//2690 2690//2689 +f 2687//2690 2688//2692 2691//2691 +f 2697//2694 2700//2700 2696//2695 +f 2698//2697 2697//2694 2693//2693 +f 2699//2699 2698//2697 2694//2696 +f 2700//2700 2699//2699 2695//2698 +f 2700//2700 2697//2694 2704//2702 +f 2697//2694 2698//2697 2701//2701 +f 2698//2697 2699//2699 2702//2703 +f 2699//2699 2700//2700 2703//2704 +f 2705//2705 2708//2708 2704//2702 +f 2706//2706 2705//2705 2701//2701 +f 2707//2707 2706//2706 2702//2703 +f 2708//2708 2707//2707 2703//2704 +f 2708//2708 2705//2705 2712//2710 +f 2705//2705 2706//2706 2709//2709 +f 2706//2706 2707//2707 2710//2711 +f 2707//2707 2708//2708 2711//2712 +f 2713//2713 2716//2716 2712//2710 +f 2714//2714 2713//2713 2709//2709 +f 2715//2715 2714//2714 2710//2711 +f 2716//2716 2715//2715 2711//2712 +f 2716//2716 2713//2713 2720//2718 +f 2713//2713 2714//2714 2717//2717 +f 2714//2714 2715//2715 2718//2719 +f 2715//2715 2716//2716 2719//2720 +f 2720//2718 2717//2717 2724//2722 +f 2717//2717 2718//2719 2721//2721 +f 2718//2719 2719//2720 2722//2723 +f 2719//2720 2720//2718 2723//2724 +f 2728//2732 2725//2725 2732//2727 +f 2730//2729 2729//2726 2725//2725 +f 2726//2728 2727//2730 2730//2729 +f 2732//2727 2731//2731 2727//2730 +f 2733//2733 2736//2736 2732//2727 +f 2729//2726 2730//2729 2733//2733 +f 2735//2735 2734//2734 2730//2729 +f 2731//2731 2732//2727 2735//2735 +f 2736//2736 2733//2733 2740//2738 +f 2733//2733 2734//2734 2737//2737 +f 2734//2734 2735//2735 2738//2739 +f 2735//2735 2736//2736 2739//2740 +f 2740//2738 2737//2737 2744//2742 +f 2737//2737 2738//2739 2741//2741 +f 2738//2739 2739//2740 2742//2743 +f 2739//2740 2740//2738 2743//2744 +f 2749//2746 2752//2752 2748//2747 +f 2750//2749 2749//2746 2745//2745 +f 2751//2751 2750//2749 2746//2748 +f 2752//2752 2751//2751 2747//2750 +f 2752//2752 2749//2746 2756//2754 +f 2749//2746 2750//2749 2753//2753 +f 2750//2749 2751//2751 2754//2755 +f 2751//2751 2752//2752 2755//2756 +f 2760//2764 2757//2757 2764//2759 +f 2757//2757 2758//2760 2761//2758 +f 2758//2760 2759//2762 2762//2761 +f 2759//2762 2760//2764 2763//2763 +f 2768//2772 2765//2765 2772//2767 +f 2765//2765 2766//2768 2769//2766 +f 2766//2768 2767//2770 2770//2769 +f 2767//2770 2768//2772 2771//2771 +f 2773//2773 2776//2776 2772//2767 +f 2774//2774 2773//2773 2769//2766 +f 2775//2775 2774//2774 2770//2769 +f 2776//2776 2775//2775 2771//2771 +f 2776//2776 2773//2773 2780//2778 +f 2773//2773 2774//2774 2777//2777 +f 2774//2774 2775//2775 2778//2779 +f 2775//2775 2776//2776 2779//2780 +f 2781//2781 2784//2784 2780//2778 +f 2782//2782 2781//2781 2777//2777 +f 2783//2783 2782//2782 2778//2779 +f 2784//2784 2783//2783 2779//2780 +f 2784//2784 2781//2781 2788//2786 +f 2781//2781 2782//2782 2785//2785 +f 2782//2782 2783//2783 2786//2787 +f 2783//2783 2784//2784 2787//2788 +f 2788//2786 2785//2785 2792//2790 +f 2785//2785 2786//2787 2789//2789 +f 2786//2787 2787//2788 2790//2791 +f 2787//2788 2788//2786 2791//2792 +f 2797//2794 2800//2800 2796//2795 +f 2793//2793 2794//2796 2797//2794 +f 2799//2799 2798//2797 2794//2796 +f 2795//2798 2796//2795 2799//2799 +f 2800//2800 2797//2794 2804//2802 +f 2802//2803 2801//2801 2797//2794 +f 2798//2797 2799//2799 2802//2803 +f 2804//2802 2803//2804 2799//2799 +f 2804//2802 2801//2801 2808//2806 +f 2801//2801 2802//2803 2805//2805 +f 2802//2803 2803//2804 2806//2807 +f 2803//2804 2804//2802 2807//2808 +f 2812//2816 2809//2809 2816//2811 +f 2809//2809 2810//2812 2813//2810 +f 2810//2812 2811//2814 2814//2813 +f 2811//2814 2812//2816 2815//2815 +f 2821//2818 2824//2824 2820//2819 +f 2817//2817 2818//2820 2821//2818 +f 2823//2823 2822//2821 2818//2820 +f 2819//2822 2820//2819 2823//2823 +f 2824//2824 2821//2818 2828//2826 +f 2826//2827 2825//2825 2821//2818 +f 2822//2821 2823//2823 2826//2827 +f 2828//2826 2827//2828 2823//2823 +f 2828//2826 2825//2825 2832//2830 +f 2830//2831 2829//2829 2825//2825 +f 2826//2827 2827//2828 2830//2831 +f 2832//2830 2831//2832 2827//2828 +f 2833//2833 2836//2836 2832//2830 +f 2829//2829 2830//2831 2833//2833 +f 2835//2835 2834//2834 2830//2831 +f 2831//2832 2832//2830 2835//2835 +f 2836//2836 2833//2833 2840//2838 +f 2838//2839 2837//2837 2833//2833 +f 2834//2834 2835//2835 2838//2839 +f 2840//2838 2839//2840 2835//2835 +f 2841//2841 2844//2844 2840//2838 +f 2837//2837 2838//2839 2841//2841 +f 2843//2843 2842//2842 2838//2839 +f 2839//2840 2840//2838 2843//2843 +f 2844//2844 2841//2841 2848//2846 +f 2841//2841 2842//2842 2845//2845 +f 2842//2842 2843//2843 2846//2847 +f 2843//2843 2844//2844 2847//2848 +f 2853//2850 2856//2856 2852//2851 +f 2854//2853 2853//2850 2849//2849 +f 2855//2855 2854//2853 2850//2852 +f 2856//2856 2855//2855 2851//2854 +f 2856//2856 2853//2850 2860//2858 +f 2853//2850 2854//2853 2857//2857 +f 2854//2853 2855//2855 2858//2859 +f 2855//2855 2856//2856 2859//2860 +f 2860//2858 2857//2857 2864//2862 +f 2862//2863 2861//2861 2857//2857 +f 2858//2859 2859//2860 2862//2863 +f 2864//2862 2863//2864 2859//2860 +f 2864//2862 2861//2861 2868//2866 +f 2861//2861 2862//2863 2865//2865 +f 2862//2863 2863//2864 2866//2867 +f 2863//2864 2864//2862 2867//2868 +f 2873//2870 2876//2876 2872//2871 +f 2869//2869 2870//2872 2873//2870 +f 2875//2875 2874//2873 2870//2872 +f 2871//2874 2872//2871 2875//2875 +f 2876//2876 2873//2870 2880//2878 +f 2873//2870 2874//2873 2877//2877 +f 2874//2873 2875//2875 2878//2879 +f 2875//2875 2876//2876 2879//2880 +f 2884//2888 2881//2881 2888//2883 +f 2881//2881 2882//2884 2885//2882 +f 2882//2884 2883//2886 2886//2885 +f 2883//2886 2884//2888 2887//2887 +f 2893//2890 2896//2896 2892//2891 +f 2894//2893 2893//2890 2889//2889 +f 2895//2895 2894//2893 2890//2892 +f 2896//2896 2895//2895 2891//2894 +f 2896//2896 2893//2890 2900//2898 +f 2893//2890 2894//2893 2897//2897 +f 2894//2893 2895//2895 2898//2899 +f 2895//2895 2896//2896 2899//2900 +f 2901//2901 2904//2904 2900//2898 +f 2902//2902 2901//2901 2897//2897 +f 2903//2903 2902//2902 2898//2899 +f 2904//2904 2903//2903 2899//2900 +f 2904//2904 2901//2901 2908//2906 +f 2901//2901 2902//2902 2905//2905 +f 2902//2902 2903//2903 2906//2907 +f 2903//2903 2904//2904 2907//2908 +f 2909//2909 2912//2912 2908//2906 +f 2910//2910 2909//2909 2905//2905 +f 2911//2911 2910//2910 2906//2907 +f 2912//2912 2911//2911 2907//2908 +f 2912//2912 2909//2909 2916//2914 +f 2909//2909 2910//2910 2913//2913 +f 2910//2910 2911//2911 2914//2915 +f 2911//2911 2912//2912 2915//2916 +f 2921//2918 2924//2924 2920//2919 +f 2922//2921 2921//2918 2917//2917 +f 2923//2923 2922//2921 2918//2920 +f 2924//2924 2923//2923 2919//2922 +f 2924//2924 2921//2918 2928//2926 +f 2921//2918 2922//2921 2925//2925 +f 2922//2921 2923//2923 2926//2927 +f 2923//2923 2924//2924 2927//2928 +f 2928//2926 2925//2925 2932//2930 +f 2925//2925 2926//2927 2929//2929 +f 2926//2927 2927//2928 2930//2931 +f 2927//2928 2928//2926 2931//2932 +f 2936//2940 2933//2933 2940//2935 +f 2933//2933 2934//2936 2937//2934 +f 2934//2936 2935//2938 2938//2937 +f 2935//2938 2936//2940 2939//2939 +f 2945//2942 2948//2948 2944//2943 +f 2946//2945 2945//2942 2941//2941 +f 2947//2947 2946//2945 2942//2944 +f 2948//2948 2947//2947 2943//2946 +f 2948//2948 2945//2942 2952//2950 +f 2945//2942 2946//2945 2949//2949 +f 2946//2945 2947//2947 2950//2951 +f 2947//2947 2948//2948 2951//2952 +f 2953//2953 2956//2956 2952//2950 +f 2954//2954 2953//2953 2949//2949 +f 2955//2955 2954//2954 2950//2951 +f 2956//2956 2955//2955 2951//2952 +f 2956//2956 2953//2953 2960//2958 +f 2953//2953 2954//2954 2957//2957 +f 2954//2954 2955//2955 2958//2959 +f 2955//2955 2956//2956 2959//2960 +f 2961//2961 2964//2964 2960//2958 +f 2962//2962 2961//2961 2957//2957 +f 2963//2963 2962//2962 2958//2959 +f 2964//2964 2963//2963 2959//2960 +f 2965//2965 2968//2968 2964//2964 +f 2966//2966 2965//2965 2961//2961 +f 2967//2967 2966//2966 2962//2962 +f 2968//2968 2967//2967 2963//2963 +f 2968//2968 2965//2965 2972//2970 +f 2965//2965 2966//2966 2969//2969 +f 2966//2966 2967//2967 2970//2971 +f 2967//2967 2968//2968 2971//2972 +f 2976//2980 2973//2973 2980//2975 +f 2978//2977 2977//2974 2973//2973 +f 2974//2976 2975//2978 2978//2977 +f 2980//2975 2979//2979 2975//2978 +f 2980//2975 2977//2974 2984//2982 +f 2982//2983 2981//2981 2977//2974 +f 2978//2977 2979//2979 2982//2983 +f 2984//2982 2983//2984 2979//2979 +f 2984//2982 2981//2981 2988//2986 +f 2981//2981 2982//2983 2985//2985 +f 2982//2983 2983//2984 2986//2987 +f 2983//2984 2984//2982 2987//2988 +f 2988//2986 2985//2985 2992//2990 +f 2985//2985 2986//2987 2989//2989 +f 2986//2987 2987//2988 2990//2991 +f 2987//2988 2988//2986 2991//2992 +f 2997//2994 3000//3000 2996//2995 +f 2993//2993 2994//2996 2997//2994 +f 2999//2999 2998//2997 2994//2996 +f 2995//2998 2996//2995 2999//2999 +f 3000//3000 2997//2994 3004//3002 +f 2997//2994 2998//2997 3001//3001 +f 2998//2997 2999//2999 3002//3003 +f 2999//2999 3000//3000 3003//3004 +f 3008//3012 3005//3005 3012//3007 +f 3005//3005 3006//3008 3009//3006 +f 3006//3008 3007//3010 3010//3009 +f 3007//3010 3008//3012 3011//3011 +f 3017//3014 3020//3020 3016//3015 +f 3013//3013 3014//3016 3017//3014 +f 3019//3019 3018//3017 3014//3016 +f 3015//3018 3016//3015 3019//3019 +f 3020//3020 3017//3014 3024//3022 +f 3022//3023 3021//3021 3017//3014 +f 3018//3017 3019//3019 3022//3023 +f 3024//3022 3023//3024 3019//3019 +f 3025//3025 3028//3028 3024//3022 +f 3021//3021 3022//3023 3025//3025 +f 3027//3027 3026//3026 3022//3023 +f 3023//3024 3024//3022 3027//3027 +f 3028//3028 3025//3025 3032//3030 +f 3030//3031 3029//3029 3025//3025 +f 3026//3026 3027//3027 3030//3031 +f 3032//3030 3031//3032 3027//3027 +f 3032//3030 3029//3029 3036//3034 +f 3034//3035 3033//3033 3029//3029 +f 3030//3031 3031//3032 3034//3035 +f 3036//3034 3035//3036 3031//3032 +f 3036//3034 3033//3033 3040//3038 +f 3033//3033 3034//3035 3037//3037 +f 3034//3035 3035//3036 3038//3039 +f 3035//3036 3036//3034 3039//3040 +f 3045//3042 3048//3048 3044//3043 +f 3041//3041 3042//3044 3045//3042 +f 3047//3047 3046//3045 3042//3044 +f 3043//3046 3044//3043 3047//3047 +f 3048//3048 3045//3042 3052//3050 +f 3050//3051 3049//3049 3045//3042 +f 3046//3045 3047//3047 3050//3051 +f 3052//3050 3051//3052 3047//3047 +f 3052//3050 3049//3049 3056//3054 +f 3049//3049 3050//3051 3053//3053 +f 3050//3051 3051//3052 3054//3055 +f 3051//3052 3052//3050 3055//3056 +f 3060//3064 3057//3057 3064//3059 +f 3057//3057 3058//3060 3061//3058 +f 3058//3060 3059//3062 3062//3061 +f 3059//3062 3060//3064 3063//3063 +f 3069//3066 3072//3072 3068//3067 +f 3070//3069 3069//3066 3065//3065 +f 3071//3071 3070//3069 3066//3068 +f 3072//3072 3071//3071 3067//3070 +f 3073//3073 3076//3076 3072//3072 +f 3074//3074 3073//3073 3069//3066 +f 3075//3075 3074//3074 3070//3069 +f 3076//3076 3075//3075 3071//3071 +f 3076//3076 3073//3073 3080//3078 +f 3073//3073 3074//3074 3077//3077 +f 3074//3074 3075//3075 3078//3079 +f 3075//3075 3076//3076 3079//3080 +f 3080//3078 3077//3077 3084//3082 +f 3077//3077 3078//3079 3081//3081 +f 3078//3079 3079//3080 3082//3083 +f 3079//3080 3080//3078 3083//3084 +f 3085//3085 3088//3088 3084//3082 +f 3086//3086 3085//3085 3081//3081 +f 3087//3087 3086//3086 3082//3083 +f 3088//3088 3087//3087 3083//3084 +f 3088//3088 3085//3085 3092//3090 +f 3085//3085 3086//3086 3089//3089 +f 3086//3086 3087//3087 3090//3091 +f 3087//3087 3088//3088 3091//3092 +f 3092//3090 3089//3089 3096//3094 +f 3089//3089 3090//3091 3093//3093 +f 3090//3091 3091//3092 3094//3095 +f 3091//3092 3092//3090 3095//3096 +f 3101//3098 3104//3104 3100//3099 +f 3102//3101 3101//3098 3097//3097 +f 3103//3103 3102//3101 3098//3100 +f 3104//3104 3103//3103 3099//3102 +f 3105//3105 3108//3108 3104//3104 +f 3106//3106 3105//3105 3101//3098 +f 3107//3107 3106//3106 3102//3101 +f 3108//3108 3107//3107 3103//3103 +f 3108//3108 3105//3105 3112//3110 +f 3110//3111 3109//3109 3105//3105 +f 3106//3106 3107//3107 3110//3111 +f 3112//3110 3111//3112 3107//3107 +f 3112//3110 3109//3109 3116//3114 +f 3109//3109 3110//3111 3113//3113 +f 3110//3111 3111//3112 3114//3115 +f 3111//3112 3112//3110 3115//3116 +f 3120//3124 3117//3117 3124//3119 +f 3122//3121 3121//3118 3117//3117 +f 3118//3120 3119//3122 3122//3121 +f 3124//3119 3123//3123 3119//3122 +f 3124//3119 3121//3118 3128//3126 +f 3121//3118 3122//3121 3125//3125 +f 3122//3121 3123//3123 3126//3127 +f 3123//3123 3124//3119 3127//3128 +f 3132//3136 3129//3129 3136//3131 +f 3129//3129 3130//3132 3133//3130 +f 3130//3132 3131//3134 3134//3133 +f 3131//3134 3132//3136 3135//3135 +f 3140//3144 3137//3137 3144//3139 +f 3137//3137 3138//3140 3141//3138 +f 3138//3140 3139//3142 3142//3141 +f 3139//3142 3140//3144 3143//3143 +f 3144//3139 3141//3138 3148//3146 +f 3141//3138 3142//3141 3145//3145 +f 3142//3141 3143//3143 3146//3147 +f 3143//3143 3144//3139 3147//3148 +f 3148//3146 3145//3145 3152//3150 +f 3145//3145 3146//3147 3149//3149 +f 3146//3147 3147//3148 3150//3151 +f 3147//3148 3148//3146 3151//3152 +f 3153//3153 3156//3156 3152//3150 +f 3149//3149 3150//3151 3153//3153 +f 3155//3155 3154//3154 3150//3151 +f 3151//3152 3152//3150 3155//3155 +f 3157//3157 3160//3160 3156//3156 +f 3153//3153 3154//3154 3157//3157 +f 3159//3159 3158//3158 3154//3154 +f 3155//3155 3156//3156 3159//3159 +f 3160//3160 3157//3157 3164//3162 +f 3157//3157 3158//3158 3161//3161 +f 3158//3158 3159//3159 3162//3163 +f 3159//3159 3160//3160 3163//3164 +f 3168//3172 3165//3165 3172//3167 +f 3170//3169 3169//3166 3165//3165 +f 3166//3168 3167//3170 3170//3169 +f 3172//3167 3171//3171 3167//3170 +f 3173//3173 3176//3176 3172//3167 +f 3169//3166 3170//3169 3173//3173 +f 3175//3175 3174//3174 3170//3169 +f 3171//3171 3172//3167 3175//3175 +f 3176//3176 3173//3173 3180//3178 +f 3173//3173 3174//3174 3177//3177 +f 3174//3174 3175//3175 3178//3179 +f 3175//3175 3176//3176 3179//3180 +f 3184//3188 3181//3181 3188//3183 +f 3181//3181 3182//3184 3185//3182 +f 3182//3184 3183//3186 3186//3185 +f 3183//3186 3184//3188 3187//3187 +f 3193//3190 3196//3196 3192//3191 +f 3194//3193 3193//3190 3189//3189 +f 3195//3195 3194//3193 3190//3192 +f 3196//3196 3195//3195 3191//3194 +f 3196//3196 3193//3190 3200//3198 +f 3193//3190 3194//3193 3197//3197 +f 3194//3193 3195//3195 3198//3199 +f 3195//3195 3196//3196 3199//3200 +f 3201//3201 3204//3204 3200//3198 +f 3202//3202 3201//3201 3197//3197 +f 3203//3203 3202//3202 3198//3199 +f 3204//3204 3203//3203 3199//3200 +f 3205//3205 3208//3208 3204//3204 +f 3206//3206 3205//3205 3201//3201 +f 3207//3207 3206//3206 3202//3202 +f 3208//3208 3207//3207 3203//3203 +f 3209//3209 3212//3212 3208//3208 +f 3210//3210 3209//3209 3205//3205 +f 3211//3211 3210//3210 3206//3206 +f 3212//3212 3211//3211 3207//3207 +f 3212//3212 3209//3209 3216//3214 +f 3209//3209 3210//3210 3213//3213 +f 3210//3210 3211//3211 3214//3215 +f 3211//3211 3212//3212 3215//3216 +f 3216//3214 3213//3213 3220//3218 +f 3213//3213 3214//3215 3217//3217 +f 3214//3215 3215//3216 3218//3219 +f 3215//3216 3216//3214 3219//3220 +f 3224//3228 3221//3221 3228//3223 +f 3226//3225 3225//3222 3221//3221 +f 3222//3224 3223//3226 3226//3225 +f 3228//3223 3227//3227 3223//3226 +f 3228//3223 3225//3222 3232//3230 +f 3230//3231 3229//3229 3225//3222 +f 3226//3225 3227//3227 3230//3231 +f 3232//3230 3231//3232 3227//3227 +f 3233//3233 3236//3236 3232//3230 +f 3229//3229 3230//3231 3233//3233 +f 3235//3235 3234//3234 3230//3231 +f 3231//3232 3232//3230 3235//3235 +f 3236//3236 3233//3233 3240//3238 +f 3233//3233 3234//3234 3237//3237 +f 3234//3234 3235//3235 3238//3239 +f 3235//3235 3236//3236 3239//3240 +f 3244//3248 3241//3241 3248//3243 +f 3246//3245 3245//3242 3241//3241 +f 3242//3244 3243//3246 3246//3245 +f 3248//3243 3247//3247 3243//3246 +f 3248//3243 3245//3242 3252//3250 +f 3245//3242 3246//3245 3249//3249 +f 3246//3245 3247//3247 3250//3251 +f 3247//3247 3248//3243 3251//3252 +f 3256//3260 3253//3253 3260//3255 +f 3253//3253 3254//3256 3257//3254 +f 3254//3256 3255//3258 3258//3257 +f 3255//3258 3256//3260 3259//3259 +f 3264//3268 3261//3261 3268//3263 +f 3261//3261 3262//3264 3265//3262 +f 3262//3264 3263//3266 3266//3265 +f 3263//3266 3264//3268 3267//3267 +f 3268//3263 3265//3262 3272//3270 +f 3265//3262 3266//3265 3269//3269 +f 3266//3265 3267//3267 3270//3271 +f 3272//3270 3271//3272 3267//3267 +f 3273//3273 3276//3276 3272//3270 +f 3274//3274 3273//3273 3269//3269 +f 3275//3275 3274//3274 3270//3271 +f 3271//3272 3272//3270 3275//3275 +f 3276//3276 3273//3273 3280//3278 +f 3278//3279 3277//3277 3273//3273 +f 3274//3274 3275//3275 3278//3279 +f 3280//3278 3279//3280 3275//3275 +f 3281//3281 3284//3284 3280//3278 +f 3277//3277 3278//3279 3281//3281 +f 3283//3283 3282//3282 3278//3279 +f 3279//3280 3280//3278 3283//3283 +f 3284//3284 3281//3281 3288//3286 +f 3281//3281 3282//3282 3285//3285 +f 3282//3282 3283//3283 3286//3287 +f 3283//3283 3284//3284 3287//3288 +f 3292//3296 3289//3289 3296//3291 +f 3289//3289 3290//3292 3293//3290 +f 3290//3292 3291//3294 3294//3293 +f 3291//3294 3292//3296 3295//3295 +f 3296//3291 3293//3290 3300//3298 +f 3293//3290 3294//3293 3297//3297 +f 3294//3293 3295//3295 3298//3299 +f 3295//3295 3296//3291 3299//3300 +f 3300//3298 3297//3297 3304//3302 +f 3297//3297 3298//3299 3301//3301 +f 3298//3299 3299//3300 3302//3303 +f 3299//3300 3300//3298 3303//3304 +f 3308//3312 3305//3305 3312//3307 +f 3305//3305 3306//3308 3309//3306 +f 3306//3308 3307//3310 3310//3309 +f 3307//3310 3308//3312 3311//3311 +f 3317//3314 3320//3320 3316//3315 +f 3313//3313 3314//3316 3317//3314 +f 3319//3319 3318//3317 3314//3316 +f 3315//3318 3316//3315 3319//3319 +f 3321//3321 3324//3324 3320//3320 +f 3317//3314 3318//3317 3321//3321 +f 3323//3323 3322//3322 3318//3317 +f 3319//3319 3320//3320 3323//3323 +f 3324//3324 3321//3321 3328//3326 +f 3326//3327 3325//3325 3321//3321 +f 3322//3322 3323//3323 3326//3327 +f 3328//3326 3327//3328 3323//3323 +f 3328//3326 3325//3325 3332//3330 +f 3330//3331 3329//3329 3325//3325 +f 3326//3327 3327//3328 3330//3331 +f 3332//3330 3331//3332 3327//3328 +f 3332//3330 3329//3329 3336//3334 +f 3334//3335 3333//3333 3329//3329 +f 3330//3331 3331//3332 3334//3335 +f 3336//3334 3335//3336 3331//3332 +f 3337//3337 3340//3340 3336//3334 +f 3333//3333 3334//3335 3337//3337 +f 3339//3339 3338//3338 3334//3335 +f 3335//3336 3336//3334 3339//3339 +f 3340//3340 3337//3337 3344//3342 +f 3337//3337 3338//3338 3341//3341 +f 3338//3338 3339//3339 3342//3343 +f 3339//3339 3340//3340 3343//3344 +f 3349//3346 3352//3352 3348//3347 +f 3350//3349 3349//3346 3345//3345 +f 3351//3351 3350//3349 3346//3348 +f 3352//3352 3351//3351 3347//3350 +f 3352//3352 3349//3346 3356//3354 +f 3349//3346 3350//3349 3353//3353 +f 3350//3349 3351//3351 3354//3355 +f 3351//3351 3352//3352 3355//3356 +f 3356//3354 3353//3353 3360//3358 +f 3353//3353 3354//3355 3357//3357 +f 3354//3355 3355//3356 3358//3359 +f 3355//3356 3356//3354 3359//3360 +f 3360//3358 3357//3357 3364//3362 +f 3357//3357 3358//3359 3361//3361 +f 3358//3359 3359//3360 3362//3363 +f 3359//3360 3360//3358 3363//3364 +f 3369//3366 3372//3372 3368//3367 +f 3370//3369 3369//3366 3365//3365 +f 3371//3371 3370//3369 3366//3368 +f 3372//3372 3371//3371 3367//3370 +f 3372//3372 3369//3366 3376//3374 +f 3369//3366 3370//3369 3373//3373 +f 3370//3369 3371//3371 3374//3375 +f 3371//3371 3372//3372 3375//3376 +f 3380//3384 3377//3377 3384//3379 +f 3377//3377 3378//3380 3381//3378 +f 3378//3380 3379//3382 3382//3381 +f 3379//3382 3380//3384 3383//3383 +f 3388//3392 3385//3385 3392//3387 +f 3385//3385 3386//3388 3389//3386 +f 3386//3388 3387//3390 3390//3389 +f 3387//3390 3388//3392 3391//3391 +f 3393//3393 3396//3396 3392//3387 +f 3394//3394 3393//3393 3389//3386 +f 3395//3395 3394//3394 3390//3389 +f 3396//3396 3395//3395 3391//3391 +f 3397//3397 3400//3400 3396//3396 +f 3398//3398 3397//3397 3393//3393 +f 3399//3399 3398//3398 3394//3394 +f 3400//3400 3399//3399 3395//3395 +f 3401//3401 3404//3404 3400//3400 +f 3402//3402 3401//3401 3397//3397 +f 3403//3403 3402//3402 3398//3398 +f 3404//3404 3403//3403 3399//3399 +f 3404//3404 3401//3401 3408//3406 +f 3401//3401 3402//3402 3405//3405 +f 3402//3402 3403//3403 3406//3407 +f 3403//3403 3404//3404 3407//3408 +f 3408//3406 3405//3405 3412//3410 +f 3405//3405 3406//3407 3409//3409 +f 3406//3407 3407//3408 3410//3411 +f 3407//3408 3408//3406 3411//3412 +f 3417//3414 3420//3420 3416//3415 +f 3413//3413 3414//3416 3417//3414 +f 3419//3419 3418//3417 3414//3416 +f 3415//3418 3416//3415 3419//3419 +f 3420//3420 3417//3414 3424//3422 +f 3422//3423 3421//3421 3417//3414 +f 3418//3417 3419//3419 3422//3423 +f 3424//3422 3423//3424 3419//3419 +f 3424//3422 3421//3421 3428//3426 +f 3421//3421 3422//3423 3425//3425 +f 3422//3423 3423//3424 3426//3427 +f 3423//3424 3424//3422 3427//3428 +f 3432//3436 3429//3429 3436//3431 +f 3429//3429 3430//3432 3433//3430 +f 3430//3432 3431//3434 3434//3433 +f 3431//3434 3432//3436 3435//3435 +f 3441//3438 3444//3444 3440//3439 +f 3442//3441 3441//3438 3437//3437 +f 3443//3443 3442//3441 3438//3440 +f 3444//3444 3443//3443 3439//3442 +f 3444//3444 3441//3438 3448//3446 +f 3441//3438 3442//3441 3445//3445 +f 3442//3441 3443//3443 3446//3447 +f 3443//3443 3444//3444 3447//3448 +f 3448//3446 3445//3445 3452//3450 +f 3445//3445 3446//3447 3449//3449 +f 3446//3447 3447//3448 3450//3451 +f 3447//3448 3448//3446 3451//3452 +f 3453//3453 3456//3456 3452//3450 +f 3454//3454 3453//3453 3449//3449 +f 3455//3455 3454//3454 3450//3451 +f 3456//3456 3455//3455 3451//3452 +f 3457//3457 3460//3460 3456//3456 +f 3458//3458 3457//3457 3453//3453 +f 3459//3459 3458//3458 3454//3454 +f 3460//3460 3459//3459 3455//3455 +f 3461//3461 3464//3464 3460//3460 +f 3462//3462 3461//3461 3457//3457 +f 3463//3463 3462//3462 3458//3458 +f 3464//3464 3463//3463 3459//3459 +f 3464//3464 3461//3461 3468//3466 +f 3461//3461 3462//3462 3465//3465 +f 3462//3462 3463//3463 3466//3467 +f 3463//3463 3464//3464 3467//3468 +f 3473//3470 3476//3476 3472//3471 +f 3474//3473 3473//3470 3469//3469 +f 3475//3475 3474//3473 3470//3472 +f 3476//3476 3475//3475 3471//3474 +f 3476//3476 3473//3470 3480//3478 +f 3473//3470 3474//3473 3477//3477 +f 3474//3473 3475//3475 3478//3479 +f 3475//3475 3476//3476 3479//3480 +f 3480//3478 3477//3477 3484//3482 +f 3482//3483 3481//3481 3477//3477 +f 3478//3479 3479//3480 3482//3483 +f 3484//3482 3483//3484 3479//3480 +f 3484//3482 3481//3481 3488//3486 +f 3481//3481 3482//3483 3485//3485 +f 3482//3483 3483//3484 3486//3487 +f 3483//3484 3484//3482 3487//3488 +f 3492//3496 3489//3489 3496//3491 +f 3489//3489 3490//3492 3493//3490 +f 3490//3492 3491//3494 3494//3493 +f 3491//3494 3492//3496 3495//3495 +f 3496//3491 3493//3490 3500//3498 +f 3493//3490 3494//3493 3497//3497 +f 3494//3493 3495//3495 3498//3499 +f 3495//3495 3496//3491 3499//3500 +f 3504//3508 3501//3501 3508//3503 +f 3501//3501 3502//3504 3505//3502 +f 3502//3504 3503//3506 3506//3505 +f 3503//3506 3504//3508 3507//3507 +f 3513//3510 3516//3516 3512//3511 +f 3509//3509 3510//3512 3513//3510 +f 3515//3515 3514//3513 3510//3512 +f 3511//3514 3512//3511 3515//3515 +f 3517//3517 3520//3520 3516//3516 +f 3513//3510 3514//3513 3517//3517 +f 3519//3519 3518//3518 3514//3513 +f 3515//3515 3516//3516 3519//3519 +f 3520//3520 3517//3517 3524//3522 +f 3522//3523 3521//3521 3517//3517 +f 3518//3518 3519//3519 3522//3523 +f 3524//3522 3523//3524 3519//3519 +f 3524//3522 3521//3521 3528//3526 +f 3526//3527 3525//3525 3521//3521 +f 3522//3523 3523//3524 3526//3527 +f 3528//3526 3527//3528 3523//3524 +f 3529//3529 3532//3532 3528//3526 +f 3525//3525 3526//3527 3529//3529 +f 3531//3531 3530//3530 3526//3527 +f 3527//3528 3528//3526 3531//3531 +f 3532//3532 3529//3529 3536//3534 +f 3529//3529 3530//3530 3533//3533 +f 3530//3530 3531//3531 3534//3535 +f 3531//3531 3532//3532 3535//3536 +f 3541//3538 3544//3544 3540//3539 +f 3537//3537 3538//3540 3541//3538 +f 3543//3543 3542//3541 3538//3540 +f 3539//3542 3540//3539 3543//3543 +f 3544//3544 3541//3538 3548//3546 +f 3546//3547 3545//3545 3541//3538 +f 3542//3541 3543//3543 3546//3547 +f 3548//3546 3547//3548 3543//3543 +f 3548//3546 3545//3545 3552//3550 +f 3545//3545 3546//3547 3549//3549 +f 3546//3547 3547//3548 3550//3551 +f 3547//3548 3548//3546 3551//3552 +f 3556//3560 3553//3553 3560//3555 +f 3553//3553 3554//3556 3557//3554 +f 3554//3556 3555//3558 3558//3557 +f 3555//3558 3556//3560 3559//3559 +f 3564//3568 3561//3561 3568//3563 +f 3561//3561 3562//3564 3565//3562 +f 3562//3564 3563//3566 3566//3565 +f 3563//3566 3564//3568 3567//3567 +f 3568//3563 3565//3562 3572//3570 +f 3565//3562 3566//3565 3569//3569 +f 3566//3565 3567//3567 3570//3571 +f 3567//3567 3568//3563 3571//3572 +f 3572//3570 3569//3569 3576//3574 +f 3569//3569 3570//3571 3573//3573 +f 3570//3571 3571//3572 3574//3575 +f 3571//3572 3572//3570 3575//3576 +f 3577//3577 3580//3580 3576//3574 +f 3578//3578 3577//3577 3573//3573 +f 3579//3579 3578//3578 3574//3575 +f 3580//3580 3579//3579 3575//3576 +f 3580//3580 3577//3577 3584//3582 +f 3577//3577 3578//3578 3581//3581 +f 3578//3578 3579//3579 3582//3583 +f 3579//3579 3580//3580 3583//3584 +f 3585//3585 3588//3588 3584//3582 +f 3586//3586 3585//3585 3581//3581 +f 3587//3587 3586//3586 3582//3583 +f 3588//3588 3587//3587 3583//3584 +f 3588//3588 3585//3585 3592//3590 +f 3585//3585 3586//3586 3589//3589 +f 3586//3586 3587//3587 3590//3591 +f 3587//3587 3588//3588 3591//3592 +f 3596//3600 3593//3593 3600//3595 +f 3593//3593 3594//3596 3597//3594 +f 3594//3596 3595//3598 3598//3597 +f 3595//3598 3596//3600 3599//3599 +f 3601//3601 3604//3604 3600//3595 +f 3597//3594 3598//3597 3601//3601 +f 3603//3603 3602//3602 3598//3597 +f 3599//3599 3600//3595 3603//3603 +f 3605//3605 3608//3608 3604//3604 +f 3601//3601 3602//3602 3605//3605 +f 3607//3607 3606//3606 3602//3602 +f 3603//3603 3604//3604 3607//3607 +f 3608//3608 3605//3605 3612//3610 +f 3605//3605 3606//3606 3609//3609 +f 3606//3606 3607//3607 3610//3611 +f 3607//3607 3608//3608 3611//3612 +f 3616//3620 3613//3613 3620//3615 +f 3618//3617 3617//3614 3613//3613 +f 3614//3616 3615//3618 3618//3617 +f 3620//3615 3619//3619 3615//3618 +f 3620//3615 3617//3614 3624//3622 +f 3617//3614 3618//3617 3621//3621 +f 3618//3617 3619//3619 3622//3623 +f 3619//3619 3620//3615 3623//3624 +f 3628//3632 3625//3625 3632//3627 +f 3625//3625 3626//3628 3629//3626 +f 3626//3628 3627//3630 3630//3629 +f 3627//3630 3628//3632 3631//3631 +f 3637//3634 3640//3640 3636//3635 +f 3638//3637 3637//3634 3633//3633 +f 3639//3639 3638//3637 3634//3636 +f 3640//3640 3639//3639 3635//3638 +f 3640//3640 3637//3634 3644//3642 +f 3637//3634 3638//3637 3641//3641 +f 3638//3637 3639//3639 3642//3643 +f 3639//3639 3640//3640 3643//3644 +f 3645//3645 3648//3648 3644//3642 +f 3646//3646 3645//3645 3641//3641 +f 3647//3647 3646//3646 3642//3643 +f 3648//3648 3647//3647 3643//3644 +f 3649//3649 3652//3652 3648//3648 +f 3650//3650 3649//3649 3645//3645 +f 3651//3651 3650//3650 3646//3646 +f 3652//3652 3651//3651 3647//3647 +f 3652//3652 3649//3649 3656//3654 +f 3649//3649 3650//3650 3653//3653 +f 3650//3650 3651//3651 3654//3655 +f 3656//3654 3655//3656 3651//3651 +f 3656//3654 3653//3653 3660//3658 +f 3653//3653 3654//3655 3657//3657 +f 3654//3655 3655//3656 3658//3659 +f 3655//3656 3656//3654 3659//3660 +f 3664//3668 3661//3661 3668//3663 +f 3661//3661 3662//3664 3665//3662 +f 3662//3664 3663//3666 3666//3665 +f 3663//3666 3664//3668 3667//3667 +f 3669//3669 3672//3672 3668//3663 +f 3670//3670 3669//3669 3665//3662 +f 3671//3671 3670//3670 3666//3665 +f 3672//3672 3671//3671 3667//3667 +f 3672//3672 3669//3669 3676//3674 +f 3669//3669 3670//3670 3673//3673 +f 3670//3670 3671//3671 3674//3675 +f 3671//3671 3672//3672 3675//3676 +f 3680//3684 3677//3677 3684//3679 +f 3677//3677 3678//3680 3681//3678 +f 3678//3680 3679//3682 3682//3681 +f 3679//3682 3680//3684 3683//3683 +f 3689//3686 3692//3692 3688//3687 +f 3690//3689 3689//3686 3685//3685 +f 3691//3691 3690//3689 3686//3688 +f 3692//3692 3691//3691 3687//3690 +f 3692//3692 3689//3686 3696//3694 +f 3689//3686 3690//3689 3693//3693 +f 3690//3689 3691//3691 3694//3695 +f 3691//3691 3692//3692 3695//3696 +f 3697//3697 3700//3700 3696//3694 +f 3698//3698 3697//3697 3693//3693 +f 3699//3699 3698//3698 3694//3695 +f 3700//3700 3699//3699 3695//3696 +f 3701//3701 3704//3704 3700//3700 +f 3702//3702 3701//3701 3697//3697 +f 3703//3703 3702//3702 3698//3698 +f 3704//3704 3703//3703 3699//3699 +f 3705//3705 3708//3708 3704//3704 +f 3706//3706 3705//3705 3701//3701 +f 3707//3707 3706//3706 3702//3702 +f 3708//3708 3707//3707 3703//3703 +f 3708//3708 3705//3705 3712//3710 +f 3705//3705 3706//3706 3709//3709 +f 3706//3706 3707//3707 3710//3711 +f 3707//3707 3708//3708 3711//3712 +f 3712//3710 3709//3709 3716//3714 +f 3709//3709 3710//3711 3713//3713 +f 3710//3711 3711//3712 3714//3715 +f 3711//3712 3712//3710 3715//3716 +f 3721//3718 3724//3724 3720//3719 +f 3722//3721 3721//3718 3717//3717 +f 3723//3723 3722//3721 3718//3720 +f 3724//3724 3723//3723 3719//3722 +f 3724//3724 3721//3718 3728//3726 +f 3721//3718 3722//3721 3725//3725 +f 3722//3721 3723//3723 3726//3727 +f 3723//3723 3724//3724 3727//3728 +f 3729//3729 3732//3732 3728//3726 +f 3725//3725 3726//3727 3729//3729 +f 3731//3731 3730//3730 3726//3727 +f 3727//3728 3728//3726 3731//3731 +f 3732//3732 3729//3729 3736//3734 +f 3729//3729 3730//3730 3733//3733 +f 3730//3730 3731//3731 3734//3735 +f 3731//3731 3732//3732 3735//3736 +f 3741//3738 3744//3744 3740//3739 +f 3742//3741 3741//3738 3737//3737 +f 3743//3743 3742//3741 3738//3740 +f 3744//3744 3743//3743 3739//3742 +f 3744//3744 3741//3738 3748//3746 +f 3741//3738 3742//3741 3745//3745 +f 3742//3741 3743//3743 3746//3747 +f 3743//3743 3744//3744 3747//3748 +f 3752//3756 3749//3749 3756//3751 +f 3749//3749 3750//3752 3753//3750 +f 3750//3752 3751//3754 3754//3753 +f 3751//3754 3752//3756 3755//3755 +f 3761//3758 3764//3764 3760//3759 +f 3762//3761 3761//3758 3757//3757 +f 3763//3763 3762//3761 3758//3760 +f 3764//3764 3763//3763 3759//3762 +f 3765//3765 3768//3768 3764//3764 +f 3761//3758 3762//3761 3765//3765 +f 3767//3767 3766//3766 3762//3761 +f 3763//3763 3764//3764 3767//3767 +f 3769//3769 3772//3772 3768//3768 +f 3765//3765 3766//3766 3769//3769 +f 3771//3771 3770//3770 3766//3766 +f 3767//3767 3768//3768 3771//3771 +f 3772//3772 3769//3769 3776//3774 +f 3774//3775 3773//3773 3769//3769 +f 3770//3770 3771//3771 3774//3775 +f 3776//3774 3775//3776 3771//3771 +f 3777//3777 3780//3780 3776//3774 +f 3773//3773 3774//3775 3777//3777 +f 3779//3779 3778//3778 3774//3775 +f 3775//3776 3776//3774 3779//3779 +f 3780//3780 3777//3777 3784//3782 +f 3777//3777 3778//3778 3781//3781 +f 3778//3778 3779//3779 3782//3783 +f 3779//3779 3780//3780 3783//3784 +f 3788//3792 3785//3785 3792//3787 +f 3785//3785 3786//3788 3789//3786 +f 3786//3788 3787//3790 3790//3789 +f 3787//3790 3788//3792 3791//3791 +f 3792//3787 3789//3786 3796//3794 +f 3789//3786 3790//3789 3793//3793 +f 3790//3789 3791//3791 3794//3795 +f 3791//3791 3792//3787 3795//3796 +f 3796//3794 3793//3793 3800//3798 +f 3793//3793 3794//3795 3797//3797 +f 3794//3795 3795//3796 3798//3799 +f 3795//3796 3796//3794 3799//3800 +f 3804//3808 3801//3801 3808//3803 +f 3801//3801 3802//3804 3805//3802 +f 3802//3804 3803//3806 3806//3805 +f 3803//3806 3804//3808 3807//3807 +f 3813//3810 3816//3816 3812//3811 +f 3814//3813 3813//3810 3809//3809 +f 3815//3815 3814//3813 3810//3812 +f 3816//3816 3815//3815 3811//3814 +f 3817//3817 3820//3820 3816//3816 +f 3818//3818 3817//3817 3813//3810 +f 3819//3819 3818//3818 3814//3813 +f 3820//3820 3819//3819 3815//3815 +f 3821//3821 3824//3824 3820//3820 +f 3822//3822 3821//3821 3817//3817 +f 3823//3823 3822//3822 3818//3818 +f 3824//3824 3823//3823 3819//3819 +f 3825//3825 3828//3828 3824//3824 +f 3826//3826 3825//3825 3821//3821 +f 3827//3827 3826//3826 3822//3822 +f 3828//3828 3827//3827 3823//3823 +f 3828//3828 3825//3825 3832//3830 +f 3825//3825 3826//3826 3829//3829 +f 3826//3826 3827//3827 3830//3831 +f 3827//3827 3828//3828 3831//3832 +f 3833//3833 3836//3836 3832//3830 +f 3834//3834 3833//3833 3829//3829 +f 3835//3835 3834//3834 3830//3831 +f 3836//3836 3835//3835 3831//3832 +f 3836//3836 3833//3833 3840//3838 +f 3833//3833 3834//3834 3837//3837 +f 3834//3834 3835//3835 3838//3839 +f 3835//3835 3836//3836 3839//3840 +f 3845//3842 3848//3848 3844//3843 +f 3841//3841 3842//3844 3845//3842 +f 3847//3847 3846//3845 3842//3844 +f 3843//3846 3844//3843 3847//3847 +f 3848//3848 3845//3842 3852//3850 +f 3850//3851 3849//3849 3845//3842 +f 3846//3845 3847//3847 3850//3851 +f 3852//3850 3851//3852 3847//3847 +f 3852//3850 3849//3849 3856//3854 +f 3849//3849 3850//3851 3853//3853 +f 3850//3851 3851//3852 3854//3855 +f 3851//3852 3852//3850 3855//3856 +f 3856//3854 3853//3853 3860//3858 +f 3853//3853 3854//3855 3857//3857 +f 3854//3855 3855//3856 3858//3859 +f 3855//3856 3856//3854 3859//3860 +f 3865//3862 3868//3868 3864//3863 +f 3861//3861 3862//3864 3865//3862 +f 3867//3867 3866//3865 3862//3864 +f 3863//3866 3864//3863 3867//3867 +f 3868//3868 3865//3862 3872//3870 +f 3865//3862 3866//3865 3869//3869 +f 3866//3865 3867//3867 3870//3871 +f 3867//3867 3868//3868 3871//3872 +f 3876//3880 3873//3873 3880//3875 +f 3873//3873 3874//3876 3877//3874 +f 3874//3876 3875//3878 3878//3877 +f 3875//3878 3876//3880 3879//3879 diff --git a/examples/16-shadowmaps/varying.def.sc b/examples/16-shadowmaps/varying.def.sc new file mode 100644 index 000000000..a3776d2b0 --- /dev/null +++ b/examples/16-shadowmaps/varying.def.sc @@ -0,0 +1,14 @@ +vec2 v_texcoord0 : TEXCOORD0 = vec2(0.0, 0.0); +vec4 v_texcoord1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_texcoord4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_view : TEXCOORD5 = vec3(0.0, 0.0, 0.0); +vec4 v_shadowcoord : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0); +vec4 v_position : TEXCOORD7 = vec4(0.0, 0.0, 0.0, 0.0); +vec3 v_normal : NORMAL = vec3(0.0, 0.0, 1.0); +float v_depth : FOG = 0.0; + +vec3 a_position : POSITION; +vec4 a_normal : NORMAL; +vec2 a_texcoord0 : TEXCOORD0; diff --git a/examples/16-shadowmaps/vs_shadowmaps_color.sc b/examples/16-shadowmaps/vs_shadowmaps_color.sc new file mode 100644 index 000000000..8ad767cf8 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color.sc @@ -0,0 +1,13 @@ +$input a_position + +/* + * Copyright 2013 Dario Manesku. 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) ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc new file mode 100644 index 000000000..a898c8ce2 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning.sc @@ -0,0 +1,25 @@ +$input a_position, a_normal +$output v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec3 posOffset = a_position + normal.xyz * u_shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc new file mode 100644 index 000000000..254e1d767 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_csm.sc @@ -0,0 +1,36 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_modelView, posOffset); + + vec4 wpos = vec4(mul(u_model[0], posOffset).xyz, 1.0); + v_texcoord1 = mul(u_shadowMapMtx0, wpos); + v_texcoord2 = mul(u_shadowMapMtx1, wpos); + v_texcoord3 = mul(u_shadowMapMtx2, wpos); + v_texcoord4 = mul(u_shadowMapMtx3, wpos); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc new file mode 100644 index 000000000..22a581b8e --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear.sc @@ -0,0 +1,26 @@ +$input a_position, a_normal, a_texcoord0 +$output v_normal, v_view, v_shadowcoord + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform mat4 u_lightMtx; +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec3 posOffset = a_position + normal.xyz * u_shadowMapOffset; + v_shadowcoord = mul(u_lightMtx, vec4(posOffset, 1.0) ); + v_shadowcoord.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc new file mode 100644 index 000000000..74a0fce88 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_csm.sc @@ -0,0 +1,41 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_modelView, posOffset); + + vec4 wpos = vec4(mul(u_model[0], posOffset).xyz, 1.0); + v_texcoord1 = mul(u_shadowMapMtx0, wpos); + v_texcoord2 = mul(u_shadowMapMtx1, wpos); + v_texcoord3 = mul(u_shadowMapMtx2, wpos); + v_texcoord4 = mul(u_shadowMapMtx3, wpos); + + v_texcoord1.z += 0.5; + v_texcoord2.z += 0.5; + v_texcoord3.z += 0.5; + v_texcoord4.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc new file mode 100644 index 000000000..6cdb68d77 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_linear_omni.sc @@ -0,0 +1,40 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_lightMtx, posOffset); + + v_texcoord1 = mul(u_shadowMapMtx0, v_position); + v_texcoord2 = mul(u_shadowMapMtx1, v_position); + v_texcoord3 = mul(u_shadowMapMtx2, v_position); + v_texcoord4 = mul(u_shadowMapMtx3, v_position); + + v_texcoord1.z += 0.5; + v_texcoord2.z += 0.5; + v_texcoord3.z += 0.5; + v_texcoord4.z += 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc new file mode 100644 index 000000000..464bd4664 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_lightning_omni.sc @@ -0,0 +1,35 @@ +$input a_position, a_normal +$output v_position, v_normal, v_view, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_params1; +#define u_shadowMapOffset u_params1.y + +uniform mat4 u_lightMtx; +uniform mat4 u_shadowMapMtx0; +uniform mat4 u_shadowMapMtx1; +uniform mat4 u_shadowMapMtx2; +uniform mat4 u_shadowMapMtx3; + +void main() +{ + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = normalize(mul(u_modelView, vec4(normal.xyz, 0.0) ).xyz); + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + vec4 posOffset = vec4(a_position + normal.xyz * u_shadowMapOffset, 1.0); + v_position = mul(u_lightMtx, posOffset); + + v_texcoord1 = mul(u_shadowMapMtx0, v_position); + v_texcoord2 = mul(u_shadowMapMtx1, v_position); + v_texcoord3 = mul(u_shadowMapMtx2, v_position); + v_texcoord4 = mul(u_shadowMapMtx3, v_position); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc b/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_color_texture.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. 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_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_depth.sc b/examples/16-shadowmaps/vs_shadowmaps_depth.sc new file mode 100644 index 000000000..25ccd241f --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_depth.sc @@ -0,0 +1,13 @@ +$input a_position + +/* + * Copyright 2013 Dario Manesku. 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)); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_hblur.sc b/examples/16-shadowmaps/vs_shadowmaps_hblur.sc new file mode 100644 index 000000000..42d8e2c6a --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_hblur.sc @@ -0,0 +1,32 @@ +$input a_position, a_texcoord0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2011-2013 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_smSamplingParams; +#define u_xOffset u_smSamplingParams.z + +void main() +{ + float offset = u_viewTexel.x*u_xOffset; + + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_texcoord0 = a_texcoord0; + v_texcoord1 = vec4(a_texcoord0.x - offset*1.0, a_texcoord0.y, + a_texcoord0.x + offset*1.0, a_texcoord0.y + ); + v_texcoord2 = vec4(a_texcoord0.x - offset*2.0, a_texcoord0.y, + a_texcoord0.x + offset*2.0, a_texcoord0.y + ); + v_texcoord3 = vec4(a_texcoord0.x - offset*3.0, a_texcoord0.y, + a_texcoord0.x + offset*3.0, a_texcoord0.y + ); + v_texcoord4 = vec4(a_texcoord0.x - offset*4.0, a_texcoord0.y, + a_texcoord0.x + offset*4.0, a_texcoord0.y + ); +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc b/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc new file mode 100644 index 000000000..d6e7c4613 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_packdepth.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_position + +/* + * Copyright 2013 Dario Manesku. 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_position = gl_Position; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc b/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc new file mode 100644 index 000000000..1286d7dca --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_packdepth_linear.sc @@ -0,0 +1,15 @@ +$input a_position +$output v_depth + +/* + * Copyright 2013 Dario Manesku. 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_depth = gl_Position.z * 0.5 + 0.5; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_texture.sc b/examples/16-shadowmaps/vs_shadowmaps_texture.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_texture.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. 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_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc b/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc new file mode 100644 index 000000000..1925aa649 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_texture_lightning.sc @@ -0,0 +1,20 @@ +$input a_position, a_normal, a_texcoord0 +$output v_normal, v_view, v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. 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)); + + vec4 normal = a_normal * 2.0 - 1.0; + v_normal = mul(u_modelView, vec4(normal.xyz, 0.0)).xyz; + v_view = mul(u_modelView, vec4(a_position, 1.0)).xyz; + + v_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc b/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc new file mode 100644 index 000000000..1276312f3 --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_unpackdepth.sc @@ -0,0 +1,16 @@ +$input a_position, a_texcoord0 +$output v_texcoord0 + +/* + * Copyright 2013 Dario Manesku. 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_texcoord0 = a_texcoord0; +} diff --git a/examples/16-shadowmaps/vs_shadowmaps_vblur.sc b/examples/16-shadowmaps/vs_shadowmaps_vblur.sc new file mode 100644 index 000000000..74915a09e --- /dev/null +++ b/examples/16-shadowmaps/vs_shadowmaps_vblur.sc @@ -0,0 +1,32 @@ +$input a_position, a_texcoord0 +$output v_texcoord0, v_texcoord1, v_texcoord2, v_texcoord3, v_texcoord4 + +/* + * Copyright 2013 Dario Manesku. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +#include "../common/common.sh" + +uniform vec4 u_smSamplingParams; +#define u_yOffset u_smSamplingParams.w + +void main() +{ + float offset = u_viewTexel.y*u_yOffset; + + gl_Position = mul(u_modelViewProj, vec4(a_position, 1.0) ); + v_texcoord0 = a_texcoord0; + v_texcoord1 = vec4(a_texcoord0.x, a_texcoord0.y - offset*1.0, + a_texcoord0.x, a_texcoord0.y + offset*1.0 + ); + v_texcoord2 = vec4(a_texcoord0.x, a_texcoord0.y - offset*2.0, + a_texcoord0.x, a_texcoord0.y + offset*2.0 + ); + v_texcoord3 = vec4(a_texcoord0.x, a_texcoord0.y - offset*3.0, + a_texcoord0.x, a_texcoord0.y + offset*3.0 + ); + v_texcoord4 = vec4(a_texcoord0.x, a_texcoord0.y - offset*4.0, + a_texcoord0.x, a_texcoord0.y + offset*4.0 + ); +} diff --git a/examples/common/entry/entry.cpp b/examples/common/entry/entry.cpp index a2b60ee71..8372abf0f 100644 --- a/examples/common/entry/entry.cpp +++ b/examples/common/entry/entry.cpp @@ -104,6 +104,35 @@ namespace entry return 0; } + int cmdMove(CmdContext* /*_context*/, void* /*_userData*/, int _argc, char const* const* _argv) + { + if (_argc > 1) + { + if (0 == strcmp(_argv[1], "forward") ) + { + cameraSetKeyState(CAMERA_KEY_UP, true); + return 0; + } + else if (0 == strcmp(_argv[1], "left") ) + { + cameraSetKeyState(CAMERA_KEY_LEFT, true); + return 0; + } + else if (0 == strcmp(_argv[1], "right") ) + { + cameraSetKeyState(CAMERA_KEY_RIGHT, true); + return 0; + } + else if (0 == strcmp(_argv[1], "backward") ) + { + cameraSetKeyState(CAMERA_KEY_DOWN, true); + return 0; + } + } + + return 1; + } + static const InputBinding s_bindings[] = { { entry::Key::KeyQ, entry::Modifier::LeftCtrl, 1, cmd, "exit" }, @@ -129,7 +158,7 @@ namespace entry int main(int _argc, char** _argv) { - DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME); + //DBG(BX_COMPILER_NAME " / " BX_CPU_NAME " / " BX_ARCH_NAME " / " BX_PLATFORM_NAME); cmdAdd("mouselock", cmdMouseLock); cmdAdd("graphics", cmdGraphics ); diff --git a/examples/common/fpumath.h b/examples/common/fpumath.h index 68b1cc01b..522fd8b74 100644 --- a/examples/common/fpumath.h +++ b/examples/common/fpumath.h @@ -24,6 +24,16 @@ inline float fmaxf(float _a, float _b) } #endif // BX_COMPILER_MSVC +inline float toRad(float _deg) +{ + return _deg * float(M_PI) / 180.0f; +} + +inline float toDeg(float _rad) +{ + return _rad * 180.0f / float(M_PI); +} + inline float fclamp(float _a, float _min, float _max) { return fminf(fmaxf(_a, _min), _max); diff --git a/examples/runtime/meshes/hollowcube.bin b/examples/runtime/meshes/hollowcube.bin new file mode 100644 index 0000000000000000000000000000000000000000..81131b4864453eb24f3974731cbb66b7c346ae57 GIT binary patch literal 24175 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 b(!UU+r&NdCg~1Ku-Ut@Xty#>d6$Jke>$fp7 literal 0 HcmV?d00001 diff --git a/examples/runtime/meshes/tree.bin b/examples/runtime/meshes/tree.bin new file mode 100644 index 0000000000000000000000000000000000000000..05631ef7dd9a55160ed658c345527e8557e9d8cd GIT binary patch literal 100745 zcmZ^rcR)>l_{ZCOAj$}#l9Kq!?w-$c>{ZArB3oH0v#h5*wU<#S$!rSIJ)dKhk&p%z z8WKurXqVru-#@?m$M634>is;Qb8hEzKI3_w&s{fHN5Ujen#|mH4VF(_LG~^G2#*|M zcwiKseZFqlSCoxQ(@tTdILS*V*wJP&%XJ`U|>%)%t~5M`JO!N~Yeqr>iC*o(M*~EESLqY~pU?28|Nies!a)7q0(mOB8-b=r z6Q>tC0VhAK<7{*;koJ8s+?ewwc=uI{sC5a6uYL;jW2k-~b0S0$lSx>CPE(4wvD1Ue zld?f%f^Qj$+9Q46?yq|jQ|^}E*B(>8%#+BUk|m|i#eMcnpS{Dx2VB12XdHS!XJ*s(qTwsLxvmQfG9@l(Ut%K6N=U zHCY7{HVr4`$MP|dxH3mR2EyKfje;@$M!3>4m~na%2!q2$lSzK%sB?Y^DY_E~pA?3Y zFFplG2h1gCJGgP4%pX<+w8ozd}{h?8p0GZJd)u(ex;82W!kcdtoA zerh^giS1=R2Ns}Jl>v!fW=wL}z2IJdR1oPvKn33L-vAjsg?2`Ei=Oz|0 z#uv+QgWYH{d1*1Iq`YNH0zYEWfe~aCTLgwTM=^!R#$wUIVdTl14sgsFA=LBK$7fNq z$XUw{n0|Pw@Wa6|Xyi45L^*bXQGBYvIIaX0?#vP?@blPoxDWUaV9ww(}`0u^aL$hnsDprZ^q?HCvH^I zp?%N$lkORTRIp0r9Hmfw`!BA~zTnRrp`_n2YzxhP7(Hw=WQBYZ9J|wsIu{DKb}r6bvsjhp`eseRoNtrmwH?)#+e3cA4Xjr?%kw zd9SzuR{rp7>?|sI>?m5kzs&4A83>_zQ)&0PGg#cVH7jkcFX)`~qW;@tv23>|=kzue zj)W|wN79>7k9}a)U62CF&YrX*;S65NwdKBO+=io73DnnC7S-$}=sLAK;GE`3r4F3N zNAqQAg57%v(6~XJGXLP6J;roZ)*GlR6;f%tQ~1&S1~)eG9dvEtXxohwnDw@U%j?XA z?fM_6ua!K;hb^HO4*h}02kYrxz7{9sZKACi^-w6&K_!nmW2*0D8W-6BbH}yQu2^?m z{A@n$`S=@>H%jsz7Rp%vZaz&IB+sgGWB9xW@5NX9ap{Ig#o1jYe{q z6=*!z01ibuTx6IG-imn7Y&u{C_dY%7zh3Q~My`*W=C5S>t`{}DLYSz#4${*_?PCw> z{*gDc3<`nk(~k@K?*GGzcih3r!N4}BGSa?#@VaAzFywt8jK~yS-=!OWrA0G+`fJZ7 zQTtJNE=E?UotFW<`r%AOoIH*y6EF%ocVSt`P}1!ej#>rDTpw@QAVH-4cH{3I5?rHW z8ch6XLF^s7vBf`MnD^`>d}57BbczZF>cnu5{ENV6;R+&sW;Z@k)8hio3t>f)D{_;vsZNmaq2=`q|(*$(jgc8;{gT*70me>pep zcG&tgoJb$G!`~C$bC}o$Mp|*ieoH&vT%bd?>iK1$@;`89BM^DuhNR~{{6GlhNc zug-#MW>;)GUefkt`gET&$gKBoL#vnSu zB%NgX{9n5cqKQrlxUJ+XllnOb7D*o$3=!I*&1-Fv-|Yi6J#CDo(_frs>rGahdjV~B zXByWeASvHUOedX%Ga80m>ScBO&|yc036dbkxSr9-+J$-DUPQ|1CfL?4B^%Fl;DJ>s zWDAoBD%K-O{hHh8`#y#oU3m+16vLR55M?aDbfT~*4+aw@GU)C`YzW9BHNCIFLams& z?kbOp0gp*yaxO?MoJY0>ccO808S&Zu3Wfygl9tU^u_^5rF^X@1w`C*9fK(f7d)-KO zRM$iAj+tb0a0iy||3?-T{)V6G6Ug7KSFvbKJ5dX(ha28199SE zr8Js+lJf=Y(r~70s~5UBNs>PQ6CJ9Yud5_(|Gk&&xtt1XW~VTUcaGu|n=oRXm;_ij zh8%V6#gtq3$u90TeC>G7bnW!R$qUbunA&s8UL}XVsgM_~} z8JKlM^nUh|ySJJkIaQuS$I7Fpau>0<)(GC_rsS|=4>m!-JbipZ;e3PvIw@5`0}ci(E>v zfV*Z5T-ol4824a1IsMWPCaoPwKRXzq*X=w(-}^Q7pLsj{ddE_|m=CztWH&il-v$wC+vsHfk$Cm18(H$E4Nlb%`pN4Po=I>g{Qfo= zs<(xHIckL2_HJaJlp3pXY6Erl?-gUov&Y4_7d^$;+f5S9_T&mVHW=3WP;OsFBlheG z%v!Z470mhdbZ=4%mgpSfQhp>s=FCtkI zXYDQM^l62M!s~Q*L?_OQHfC06w1VD`RNC!&4x?t|2;NGyLd|qaLr+WLbLm%)P8@HA zlPdS9Oz2+B{NlxIsZwDh!=BL>-Zf%8{L*tVuGv3RjAwdjq2hm}oo@g5khc46)+`@QvsO6;ZwHb6JA7bwzL%iVb_Tw;xP>m$=u|= zY%s<0$<5@_$R_YQY{iXD&Bm4gBw)?0KVUY9aM_MO@ab+Tc)auv%pZD*tKKpjpG&q9 z6=5UTzr4lGy*vbcOtfHfm?9g;hI0Ety2V&Eb+;I|ZHyM<=o8XtGxH!bU`jgFC0H|R z7c6kisNc-rzeR9m@g+tj&;p0N`i~rXRRlH9HZu==)o@@1WpW$R;MMa1WU*f(x}H$$ z*Gnpt$r|5Q{J3~F@kvSp+q6$i%kebacyB3bh%Ex|&oxYoXBzI>rAhky6>7o+xBV0` z?^-Q0>PaU&xfaVPdzfQNwj|k9*$H_SCCoD4W?WM-np}|Tf~9p&nC75V?EJ0KuQRD$ zOtP;ME}f@HE(fTyPJ5CWC9fngUg;&SCwc!B)Bk#}LVZ6w@+vh6w%JRN5w9Ik5dDgj zNajMCt2P<(^Z@SLR7v!0UyAxuEfeDTBujV`+BGf6KL2iXktprg?=4+P4tw?D zeBTt3^zs@6$_*y<^FuM^c@sI5l?{3k6G*c~D1NSs>i4ft4PYYtrP1C|7L-bAVS(Ee zqIUlv#xyBHbk{GC^~JmljzsFKW*qp40Uz#^k$J{q~plUgC;G`}N&_<`KEz4mevcLCZo6QL}q4 z`5Dv!5$cb*V$t~DesvsqJEsHmD@F5#`&dj&8B5YcoYVS*({ulbWy_RE<|Q>&`TjS~ z-CI(OyQAI3Sn|k8F+Snliw?%6%z~m~NK*YPSbt3w{gUO#xU5b{u>ZlVIj4+~i~%Vf zTMUbmcQJp@u0%59D$~cxhG~qv&oxy2*2p+)>jakr1BtS48U{U8Ax;iOFqiqk+}`&W zTNh}OOodLs=27IPa~nEK>ykeEpP7=R!*?Uft{6hBmZ`JP&ngpDzolZF;iW3Z%egqWdYUkn~3b`&HcQ!LWS1&y+p&|i^!9% zcBmH&reFQ?ar=jLq`?wu?x0upA)W*P3NR73UGN(aNU1BU9bykdfjyj6*!J|^Rb!7_a{F)EtMlPIYwi~`4{EuvY^9L#v zUU9=;IpE-283svpR=oFK8 z?{cAR(hjcKA{adxMR@W2Hw5`Ug(KHL@Ap5c{DJd2EQu{06Cqwtjy*JJI5+W5 zffz5%))iyn{Lf-sVrz_VOP3RaQ-$!}CWyP|*My3z=8~eb9l*SP#AO6GV#Pc4{`YlJ z_Crp^Hyw);w)JyXstj%PU4-4!%*mDA9T1w=&Ncfj!=LB%$hvO@;InHuUE-^Xo+*>a z0k#8@S$Vp|T@_tlkL$Nr!uOn--vczUm`EBPsIk?HRA_6^4KZFD)GEd|Pb-MA!s)em zr)>uPediCPgf!8&xfBKSF4HTOa_oi$gZV!hyTlkXnsLP6nRK~+1C+dw;9vO+6Vsj7 zDWLI|b@X=ZZ#Wp)OUKWjEv7533rD(bZNLAH$OdZcQ;y?Gnn=NgX3$tTnhbs6g+<@T zLT9=HyZ`K9VwV0zj3=iX;r=5%L}Ee{%=l_b&ieF<=|xrrIBuCVnB4mV8kyRpY4LF} z{gu@i?CI?4_iq?2Pfq$sVrKSuL9JvPr1C<#=%yyVwzp*>;#Jro)5EAjjI9_a#wg(; z#$-x-ANTLIMg<|>!hjuKv-6{C$`xpL9y-6S1*Nf@x4)HkFUzh3g=Qn54KfVi5 zwNe(o&Z~nra{6*Cb2RYs6SLeFk3ptqkfPenHNnW#p1ircDRM36}RJlZGX`#q=y|EmZST?Dw}iGK%c+k;ZlEgNc+(7Z{b+FtG_r_;pwh zQ&FPEzT2{hh!(D5Tz7sR&JOw0KVDxcl_oO2+r;!ihbS6;S0JDH4iL^BO}6as5YzcX zby#`(f5-19%hgGz?-i8Sm4H#3|A29NIj5Ith86RN!?ZmLEUT=@DPE5f<0ID zCz^=M$h9<4eGRTwh$fQ`PKNKl-0A#=K=gOKNYwV|L7R0ZwTV&0y)6&O-EYG|t#~t~ zmf!H!CLsy`q7Km|S80a+44l5MfXFMe@G^KAo%J~thmEQx-(`%TU3(%uMC$Ozm0mJz zjRAbwfHdD|6{?l|CbKs%zzq(jVXuZ`=3`|zz0Lw&9aN!{-rq&#bWO-yu^cKETGDXg zAT(V*1T=X8e2D+VdBJb=66nCX%sC)&{XhD7vMmxxU6_paQ1FQ7M)FDMl4Am|)wja6 zlgM4z*?~^iXTYAln_-@IGxull9-L8W1aC`s!Gk-)s8gamcFE6#VjC}za{I(-(kmFt z3c#Csz|Tf4x-D21x74sur{@8KQ?GMZMe!hoF^eG9#|^#>`p5lQxe3poTMoloqTqme z6Q}v`I+k5r4P1L9C_c{T?wtLLTfVP@fLjqj8)a$B`fWI}Y6bkf772~_htSO^i~H_c zLjv3c`$R)JAngi%Te1;ey4`^6Co}0H#5m1*AQ~MQK(eGxf^^hB=3=c7v!|yr zcAh?9^7NlsWOFihHr^Mgq;7|{_5T=!Q#a7dX*22LgAGc|?^6VQ^GA{7@h4!DR}|Oi zzX+$xzG61oE(0q^C1%s;Y3Ma_ArmrxCyb_1-1fn9G4@n~u+M(fjBYb!|5Qw`jTMxe z2a4i{$~3q=9&@&Zam7PCAh%AMD!Sf5PI!yy3cB&RQ z@S6_T^fnxl87~^%dIK#NI0{Dn7XZ67uF*OV2B$guam&Kpp<+t{-Jvlbb2K`*KHV_D zlPb8~!gBWp3#Kn zOIn#z@1DWK_W8WziQ{;tO`jZI@f^0in$P!yoyTo_kn)R*B*Q>?wWA`dv^7Iij)E-Elek_K!OIGnc!7d1Xa>VCIF=#8U;obL3 zq1){?CT4vt{M@>hFN!D;<8i)4VqEGzUW_Lk8;AZre#}DURM>F(9W(k>JRa~IKvuuu z;7C$5Gwy91wy(%x?xf#>i(PvK)*hnx{0&Xg#~n+Dl2nft49d19CwntN%dmmD$^)*0@aP2uU!>fcml8%r~-ACb$-g|`DI zF#nZbM5q74$g?du@ICb!bIZRKzrVadTxFj?@1k9TA_H4Ajylz^cb+K}t`_aTWdqX4 zK3W7GAJ1j2{TqcflDTBc;CyH{YZv6ie8WXmFNoKY*AV>KQ<$xJ5_j%TCXZX*g5_dM zZqBhGD9L>$tMp3XkY@w8x$`)_O#VP-ocaLw>ju!V+b3bA&R?Q!Sp?S49&nWj*?416 zEs?tU7S;}}-O#RhWshKx?dB@Z-0hSripY}^C^6Gcd#fP@=3HGOQ+LzXyfAE zksvv^6gs?PXmQj>+`T{>R&^G^rYAROii$mo;)vk4;Tr@c=Fl16E?`HiDcJf}LU=n* zUwYNxq~K}LHn|-9SHGce$8E&+023H3RS8~F1=QR@1(!Ji3=;l zX8H$Sz9^+{&R1aVh=nk-RWzT|Z}i8K75Iy=pmC-F;&0c`dG>>_E`9+_YU%}jZ3$i@ z{sB7bEQI-2I-eNG$ zk!MYp%kjITJH=SWbEg=0yGM!fxq~to5ZA^C&;NiUsrHO%Nit4=$%HKV15u;i2uSsH zYY`k^n5JooecsXj@t|oiRe!};Ny=FN&t5I|1H1J za3YfNP4M*ZVvfauxG%-0pI2tLKYW2d@aj!(5*OG2p=R007t7`>*ph5^tl(VKk!>?0@>=&3QKkbaoM9+69EYXo;cbZmVe>G|QCd*DPzDA!-6rk1GQnI>2iFI{(L}#U!A+aha4@;HU$TwNE z{?2V2IO;3e?XAR`40}w4mc!9-La5?-cQn&xFlrloB(u`hS&yynsK!wSO%7C%jHMYnK?9*e<+tLs2I(X+vworu`2rC1waw|1f z;+pC%E_UvCc=2{RT`_ni>Nfgueg5_{44E+=1^D2H0e!pJ9uD|yr5D;Sp#I1nPDXk) z{M~+u7Wj?9+Te}UOlT&G&-l{yYU|PGuN&>tqpnYU$wwxrr(T-Nr7n zceKmG4LYWb;m>zOVZ;Q{^@|U~nrTLS!{K?jdhQo`pt#+(vq@o?deE24Cj|eB$32-0ELJLqEF0LUtuzaUPp#mw#%VZz?OgyssSQ8$*b6Kepvr%qcNTg| z?D)Rty74f3u58u*Q5Lg|1mgv z(Re=Katu5lag3k5aU9mm8SpPo#zIoz0e@E_0SL$t3bpYz@xO($FMXT09Q6Z3VPnd__b#Skn-0ORyZq{@KA7ID7@c z0t-%YZ7A-(XUn&bFNZoi6)wQJ7Zcy?=F6>{Ah>lj*LBVT9dqn?Z~Z24nD|5J@79Yu z{r2!avzuV87I54AWpJ{`KHfyW3A(2b=A@5C;F}-z{25y*HtF&(?v>{-G5+rPN{okk zO&4QRukUzZsw55DnF;G_{isUvIoz^7o|}H}L?NmB8`F1hEh;Ib19_v^;TPFIB!ccg;J=SbRSvlDB}QNZnc3?r-0 z)B1(G@tDw*>$4y6FqLlhlf|9>9)d|Di$JdFJe~L@6k8sTWh{K(Lsi9ny3CE^zArWYPc5-44WCnmF19o{u-TLbsp6X#*@aTGKiFqplRVv z_<%7b#paRxDUrcV;{{pQ6xpdYKKU}bM8QC?u z8jQz(re@oRqK5imvP$L$>^{%YCrK5!FYG8$e^?2pQs2_|qn)sx4HeZN`~i;v?Ub!Q zgND^1gl(>cltWTHV?7*?CdQMQZuM|_dL4azvkcRg#*=}CqWG9<2hGtshPSh`$amc~ zxOr{>KecKv$}N9Fd{4H(iM?9<0T(G;JvN81FI%AZgAyO_-hp=#b4jI66MRS*$mfo+ z!BJm-kxW*C9Wq*uANnE~FO6;@_s{o2e4Zrly15eBn@AiYhV?W~jF<*s^*_KUI*I9i^);nhXGME&#MQ3dGwC&%9ImEgN~ zx#PyIvT$&&JZotn!}|qEp~_Kt__s-&eg8{>mvlLUO9m*y2s?FlkcSlSFUsc#R29Ko z#0D|F)K8SJaYY zTPITW%xXw+`bdv`DZt}RdQ{TpH}ooZQs=rS_)&Ek9kjVp6tk(M(k{F4?o8!=zT)+j z_PV&@+;DkXyY3fkohG^;{~*j;F@X+|{t7P|ep27@df0t^EX`k411aBRc<-UpQS{aO z?JY7Sc}f2x_-KnZt;}o$g9Z)$L`MP^Domq_Y4y;QrpZfrIABMcWIrcw8p8K__=(2* z;dJuNT5ujSl=o1yL{?RUzVmH?_45q*lbx4QC(VGCmNvp)_ldj|?#E=gcCL?Ytd00y z^v1>42hwlG4bXYcnDb2f4ZMEN33izR&N zs#j>t9N{_@MC@t7-_W0obqVLVg5e_ja0}k#$~ZJyc2_uhvJ?y4O5Xfs30fz#WP!gV zo1?ahFW>$KYhRiPE0#;LpEs@L?+eD^e6K0p&L*FoUE9viWB>@}}<9IDX|-W~=l-mPxYVM|&A#($*x#TXG;9nY@wz?)C~B zR^MTYME26}Z20${qj0*^Ii~WiCVO3CBOiFGSB#~O1&VP`kfRtoit3?`$d*1VEnNn0 z=F|&3JGbEQCz9OA;PoKOuOuGbJJE1W6!ZPf9JnBGBV8V`I6+pHs>m3N^2r8_BsyW< zb1mAZH|K67k{*tD-^D`6PE>;{gL0T-O3A2lXA+mJtOEm|d6VM`x3JZ=f$8%f?~%lG z;U!T$pD(9-Y6~o}dqZ4%PvV|QZ35-mg`i$vB8rd4it=wpw2wVLy&#f4hww{S5Z7#F z3`=c`$O)-%bcikCY^*oH#c9L9rz0Mnb0^a5sq?|TTmc5VnxTfl6YlpzWBAxS7|zL@ z#W5S@IPda#@O!Zyd=XW@X>1Ln&%#%L^X!SR;cqOi?L0zfOq~Op{Aa;+=XPXwoTFiW z1e^|N!h-ODxKhHE%1uU~`)WXs@JrVu%gzZmt1apQ=DfoH53<+44ryltuN8YT&A{ z4)+=!;-fizNVO~`r@y~OgM|nAITgBaW%qm16l#t}dk*mn^Txmc-M8e(SVKHuag@J$ zYaAG;7ZSPck@)5N8UAPSVo|+g4Eg->ju`)!^hu0gSdS889kLWRvhLiNW1(O&EQn!h zHsc@f(agGGF;J4z$-oa=bQZJ=qI!KGE`7Ox_ZWnNKU=vzHd{86n2X|PqWB8~Vc}p_ zCaM$kYR2iQI*gXe8BzUL7xQLZA_fhYCx)s4(9>y5UXQtke`rs?{cPC~hVvST^KNO7 zJ)f_^u^pyFAiDm`kZr{I*d@{bSB^Y(AB4g{?S9ry^Csr*EjaJUUg9?}8o0?@NniW% zuMd$A!c?eo+(}HoSmPlzB<7{JU}Nfq{`+(Ic$H+gCxCUl4=FOfg>RB$`}Hqt33=?H zfpHDjNq8;?TSEQF^s4PRqceppIrNw0!>w_*h(nwx zJ~~Va*8buk_{s&6EBb$QXbgh-^!K1z6-cI(tVJjrE{Z?B0XYvha($N)#-7lGdhfU3 zshda~&Uaz;ywR}0`Zb(>ex8&~xr&D}^`ZRX7q}G`Le%f?#j&dh*FsDK`7Q$hCHZ?IqONSxA|(dN)hFix(6Z86(O?+I@-srV1(RQE#k=Ve6N#~$;l zOyQW+Kd^nbj_i-NMXy=Y4F%vf!$Ry zmkjfNCC1ZE4-@0pXRF2dJDOra5poBdIoRbrpBP>*z{3jKoPNP;@N_mJCJ*y4zt@{P zKH?Eu|vt;eD_>TFrdi zX@KT&YRvg(&*A31r%Zw6L~Q$M!1dXC41C0l^P7O&m0-avrB5Kg^*b}~a~4h(_L!kt z0qAa7!{`N!$NMUmnLf@x(9IMDl;UvSpLy2#7QP6Oc{{4-+n9tE zE`!M;Q9N~E;4G##_7Ps$BSA)G7em=VHNi7&Yc!Y`!aP4*3fFsz=4c(5jahPqj6!ZT z^kju_mMu|uH}EDiw)`uMN=W0BHf%*nJ8e>~Q3X7S;98PHQEj3;=^XzVD#qXAQU+|m z0FQcxG5rBnRi<=#eH_XwxXbV8p2ghI6iiUiC;i;`o1f^Yj=ZBlR1S7I@Rzz$dsU zNsFYc`2`n;M9}NHQ*fN9pC#mq>OB`+qD#N>_;UR=B9|=6e|KM`1qVLk09{+MU_%RR z+jE0*6XxI^i>2h-u~v{zzeT4-Y2)hSe#F5+f;H*BOXt7-fLVE=WOdg+pl)|*)#*IE z^*)5$9sLi!m1NQPAX@*O@FiCyCD=7oJ+rlyu?8?lF06sV66F(_v$Y!Pjn|Az67Fi%0KSlf6ee+ z5KQ*__Tcj%UoK>PEvWhIBmSo)(f&qVzy8#1H;MF>#&MH)PJQ7INCpowZ2AG@f2h%< z^M9agJrZ4mgP4^b+wWiaD}ro2-GvhuO{Twlx*%-i339K=7k?Jbpg;9H!1jYJ3HO!4 z;L=6(`-)b$VtkCipdW(fCvS4pkPdZ}*sNCd&qH!s56Dsw0XA+XoyVkL-VALd$L1Qu_}Uy@(_? zTle9xfA?tXxn2-{jU+PB4k%TaO1B$yL&m;y#6}?!ym+*? z)Z@;ID^zEuJnNa>Mw*tM#Y)Kwv_@Hl4PPn+mu{-ysORUXYLhbCsV@y(d&AMN@**7} zr@}6*lLFZo2i%!(fwFbVY|0C1*k{v@5;xA#*4zQ?f5#MIR^mu8{uLn*V@=0rVw`RJ z4L|JOPDXye0vj{j8J8XhoOm&SEc0R!8C^;saAI z^!tw!S}~ot8R`4$L`f8%Ql0UNoasG{U$S42-)AntjK_~jr`Kk@E9uwIJ(G)wqW2yA z(0YU9&y50uM{kIS+njpABbv-B7pb6FJ-v3qL;2fnM~(z~k4+ z)Gx8{sctq%o^i!LD;^X3`_Z5+TJxi%AAXnR$f$&?@NM@FK+%4|Xypwu>e?mXU+)6R z!=4yYC?wr?&qL&IdpIMXh|B%+NoV>c$n@O}Jx2mjW6?w6V08yfo7};!$`s}0Uz5(q zH^8sN6S{UCLD0HI@;={$1+m^BACQ0(iysl2MTrpY8zzKekFBfCWB z@BWd+H@?BcWf8E!Paf}BNWq2RZ%`r`2_0uPV105onSJLQTndQ<*?`M9tWp93!oLAs z6a|-DyYTUPIcPKQgrFT!pb;!!_;Q(s6@PqbiI)gMyanGNcyBgieE zR#e`SMF#mifZt1%2_0;YW<03xV+!qbkR}9%10ER6%2sDh<6Z@ z>BsEt@xqL!YEU}$H4HwIE!f~Lhm5RdKfifX%p|$DVwnG6(9aje>$aa_Vr7q@vF;S; zKA#WL;~xpUdQV{!F@@)^-oOMK2PW0G1$RhIfwP@2;LPPLftTcIy!73;U%y>xF0}EL z!x!f)p*uehek8;R(;9c;#-A(UYV<3(J7xtJ?IMlu4_m8>@`tilkHBKVHu8Nv zVAdQTXq_emCgKnoo05$u4Sk^@5xVmEwP)D1Hok}w9iUp6Pj0Y}`5o0>$KF-=!Lmo=~f^6TZ#Pa25QN2eK(Tiw;aq;qGZGMrcKIAK5 zN^4*R8B7L<>Syd7+WR>fCX&CHiX&4b;O*5vaAvS1Y4m!4lEOdaNqV&?XRbn$1*5RU zsgoSPTMq_BFPYm@bw%~QwWQD9yt#-`^;&|nlqF!qu1?YOzQEXie~K%P$wBw5c38$l zGL60ua8!>Jl&H3X0M|0{qo(7~u^psOUvtZrQT1Jd#d}2Y$)o?^Lh>L%-~QRPRu(cU zdZ5mHxllJ!RIfQ)74&3#z$=FlRNCd@hzm;a*`W(0rt1hpN0{O+pJ8x+oD}rK zpA_ZOv|&?|1nczFLHKli6+Vm~0iO;@u!Um>aq+{=aHz{rn3^ET*3Q=D*gGRc`6(m# zw@!vNvRJ_F_(jojiy^$KlV&Z>cyaSY`~L%F#&CO`G`ps18ux5nC0_YE5suYKvCqOz zadE>0Sg&XX<57++|0wDN1=)DW*bIcLMfqQ+huo@b1MtTq1|GeWWtVG4aXE`VqSIFf zR$Y~4Q<5{dC#F+T%V-gtj#gqFc6f2R@$YcwizQI8REd53+>Lu~U4>s)FNGVcl-N_r z=eTOyIe7NoB3N`uNp!z4+(J>k>49P9@HkkVof>e0(++$is_!xft59{eSmP`w2pNK3 zdo7^%j5?dHe3W~Av>HRLRzQTSIvcgxkE=ayhIq*wOx_M=pIk*w%j1QpUfLWKL_B`E z4>!X@3+=)!V6cc=&z$CRJbs|$V+;75H<;a00Ok#YyFj#X$ zKOY_H&+HbhuQmR3F(VJZhE*0aWaQKcOlrBw{E(`EF#=Wc^p_*P%wd?@qszcC_yx1g zM+Ps?_$zQQD~7PO!^nTy!T8~ePrrU*>0ENoryKuzOyiuM{Djj74avQRo!ES69yeJu z|8>n-O;YzYi}E42IEh8yAvjiv%#9d?DWlUkZg2&t?U_oZjBrI~olb6CWFu_J@g{Go z_G6F9cp81R0Um!pNsJT5YPqlrT=w54CKtxw5Q)9?W>7oaw#p)7%+k=!Y!SVh(E(mZpOCDr zwOA3ck2Xrnv7IWpq&jIH-k zqW2-YkPNYTgdeg_&>kl>)_KEs(pMj>v)P-zJFLdqF8D@fTo{3Gclpvo6V%ww6TgX; zLpDyyJ3}vzS7V2SG?2#!YH?b+8{O%q#qJx^L~73puqVr%`W)6`ca^o0CnxLhzeC=% z%w3DUsMSbj1!`gENgw*}h!z{0|CeZ<&c-3bJn1t|hh3xHMlSfuh;f(O1u>TP+9}36 z&U9m0^F0#PPzawkr7$+1r=XGN3v&14S4iBbPi)F2V_{@I`PlFtCf&(qT0AW9LiY83 z_N-GNsvh^S^vNT#nv{XtEK8#5ejmf_pAoG;Z@^^mU~+9jA+C)pAWaD$A!MEnxn@*^ zNjoa~?Q?ccCV$;mAa7klggbvha{3Xn<@+40dD=kS-+hNtpA)3ncNw~`%9$p6;>t@9~atUn8r{!)^^tpV2Cz9&A$<#3Eou`9Y@eVr(emREw)$Cfi|HKf?3 z5&7hezc&78DPv}zl43WemWqB?;}uG|a?D~ENp@f42Qq!8DQ2vG#29~*WKX4)5#58u zcw*owhBzy*N+r+8o8Xa{GIKc-V5-25oc){_SsCK8jmw#r>qPpc*F^77F>0EgVoqLA zVB472q#*Sj3JNO(5)SHY&yZ*2UC=0GQj-J=HmkGwGoO($hbH38D=7k>t?F#zksP9b z{1eW2UL}|(%D?4X=8%t(AMwcHi-MQQn(PJ9xfB=CdDj2Sy}mADEP2X9j6FPhvAw5* zXntvd(VvErZS6bIXOc2BPizPGy%uCg$4(s4tPYcee?d-dKKbOPhl5I5`p-Wszd4B* z;TPQbMWJ6Gt+tIAxqT6>zy6WmhZ;a$e;kQZx{QD0RKd=?8SbX6CzlmtMfoNv=sSN= zvPPABLVX-KV>s-d*aflC?&L`CQH*>y5>#s1VN1vf^3hKZmw0OR^T1L5#L(|Ez8N(F z?p|pHBMVOwBo&A=EDga!^!p|fQgI}@GZK$h>WgYY+hN|>YsA>M9M82FfQf%Al$rtUKZAA*Fwd-4zg{m30^dpgNvg1;A3VFxu%c~S?N zrqXaF?=!lrsv?gU)xpzClHgo44v${1B-c*XLgN)lSU-Lej@eK}M4Ke|AF9qfuIBHL zih85lxSlgfofXM0!r|RC9k2++0gbNzpG{C9?qrZpfRu+GG#6q7xCO^fB zT4(9owRWIuyNvGde2nK_$fBzyw?L#>4Arc8hEw1K#58(RCRJ!wE2{uT5L*J~hgY54IsFmzvd{OoVT_?E>vU2Xxm)6hm zkD>Cy_LfO7f5-z`8d<{nFI0tubrLXPz$3aRLf~n$H zTvnJyhc0^!+#*?lWBtO0hTCa{`%|!xkrpaEd+?+a5j66ItQhx(MT)WH_Czs`Tha|7 zFBYSIw<__`36`|uB7oL4JJj^35ifDGq+jj>9Pm&<#sl7C8-+eJk@;(kOK=qRUnZK( zq3b~c`m^WgKYe5B45mv!r=1qM@bWp9onlGl=0?NDx^iw>#9NHrEtz#yGz^CS?{|Io zlV1oBG4r_h^IP!cKkjrhs~4J3R_bD~@f*H2-I5xPh=vz~ z{;%&kCe8F-c(U8tdEmXjSjNkeekcYA`(9A+GNK1>a8aO}V|!t6+5dTCkQ-wOC^$2T zPq6RCA7@!oZ6|=Pu{-#C7g#;O2uu3r`9|<{yvA40l_9~Qs&psw$65I4ExA zN7rVt^K|`3e(`>3@*={L>N%{3zZNDmK~XK6U6BCN4kKyqZY5$mTAq5JRe@Jp zm==yuB$~+|d1Je1c+kg^?mwqUdXjGQS@SyJ`NAMtnWjMoOpW2cJcxn!*-?~5zKG=E zqrCTFMKEzrpm}rE$)OFAycXI51MNfU-;<0>9QmD#Iw57m4th0ApJ;R41wV7b!HUnM z!}RsZqL=XnTi5r%n8SOh+f;pW;m}Y%V5c-x4LL|3H0hBOm5l{*^LN6;`G@J031+1B z=7WOntaV^I<2co|G$R8gRurVL-*4l*6ZGd$Gjd~*6u+9q(+j4bp?5UQh=t7c0;yGL z@MhUL`qOkGDS?S%#MSE=GcJK}U!k$)C#BF1krpNg?*u$>s&CccGROV%L^-A?@2)1L+$ zm1p^Y2T#W&G&H*p={spG?Mm_igI*t0U-t{23Y$u0;W)JQStin5 zhB#8mq#aO}5{~wt_{ly`&UCL|C(BnyqB9zOh}2gry4$@K9K#Yt`-389(Oye)at*GgpaBbM@mld>9G+9~?&Hjv_gA*_;2k*abdc%S2l4O5{_}K;G!m zZPtIAh3EoBR`1@I-(pq{t_@dE2B?sL=54p5KH9^wLl@D_!7Aj@Ln#;2Q-$n4d=*vC zQ6`sHsJm=2EQU)ttRL^9GO_gtxZUW*>Wgb0q0j;9Wc}2ET*Mn2C|OvFirM|&f3_{x z>hA#!V;-XV3N>>5&{R(2&^5T8{}_!JuSQOvnZ;$AJ%hheFVRMMEpln}9d6ZAQwW?@ zjwGLJlH>25a*9cpKw(5Biip!B>kq!<_KtcFd)`)~mV8YDt%Y3o>SaL6Yf(GVBTH5O za?6>2)xhobX!Kw`5`Rz<{fS)$hYepL8OCcLN+X$=qp`JoZ3w>LyR32UIH=oQjP;#l0dmq+>t^Pcs z|@v@FQ;R|BB|Q%>k>|hehl8fOjJQhUI87Vtvv0 zX@P{WiRB;0hK)fHsx7$hK{>&Cs~Jpd^%3#(giiX;uVJv&G!z=}755xr^?4E-Abx)q zaw_|Qt6~j>w4U{_tZpZAKl&ZZ+%*;cYY{9YI-2;~m2`%@KKW!Qut4*n4)?BtlqS1(nakjM82yO)Rf z>t8zXqGgkX;co1P^DvuFtm(j(&n5~^)wgpTOti7wDY?Th3cTJKct(+hfpLz{< zlL=jT6GK;Z7;i zUi*a3u6hm)dW&4n`}E-38*fqdm~qfP+>!goS^cii)|eZ>J>J3f)JhVc&8755>`jmv zslip3cH?2L1@xTt5U{xz!DSDYB>VSO(z8}pkpJ6CwBEM6f~v)ihw1bfcm1Fo+4=o5 zUD)stO4mN*NQ5YZ zUXjdwFC%z-$Om<)I&RJ=MY2Rt5C&vg!7@Pt#e7mAzUO6xcYcpy;@MwZR=wpX6F&LvJTpBzKrrO&h zyUQx%#%?vi=|W#PH$NOL^wJ==u4)LAp1gqTTAR=qOARupPFomr+ys10W6}N+b<#IM zLnxbF3E#tG(8goxWb1itfsV9g{UW>2%R(Ju_(w+=dZHTg?(IT5@92=241M8W{OZ}> zedu$F4%yeLBh)T_4)^!%L&p zxv?ivK%N;XQqmM^;;P}-+>Jv8(GuQmvxCQXkD;YE&B)HBTEfs+Q#f*KFS>6r zkmxVe6#B1u0WXX8BI|(zNt1+@V7b;D_Vn40REG{Ep0hNC=Na|zL}fqP$hd#ECOan& zh6mCaXlH>HkvO3#gtPPHe_3)(xES|jB#3c5I}dhqRcLI}Yn-a|v0z<(3%p5SahI^K zI7{*jzmEB7)-^prhF`wmwzc1Q$=H>Uv-T^RZdZqgjSu8|;+a3km2V>5^lu&C8@m-| zj;Te9HoRi>d}S;pRvW5`=%T>cApP8&&6J(Pfxe=gFsEKR6HLI@oD@)mt? zmL|dSgoczhz>3$+XzN5N@_o|`+LM$H-d^vK?F<%A`W8sHjn;?VtnN~zZ=Opfl0rcL zdn4L?NrA}vZ=>-wRj}%GE1GMnKu&MXq@9PE--+dCWM3yo=3F^I4~#H{!)xkL$QpT) zlbS)L7bn7>bq~=Q6IHTX_7YuR`~g;IQPloJnS3$3M%5?n2fxNrw7*q__}|Z?O*iJl ztHeU|;h{3gd(G20_U~CR@Ep3kPm3I1TS_JCswU8GGQJOa=;GZ$Rt{KGU72e!-F0RCKFbpB%sQjjBvZ zg_n+d(1L9Sjm|V>yVSa z8Of|_q8+D}g0#d6^r^is*>&tYof|0!T6uoRq_QvhHvS8h^W6_OzAZ&u${><{`4c@7 z(FK#UmZ6b*29e)yztGN1U-&p`3A&Izh%8_kIR9$s+W9`i@V5i0^J-mP8zYBACVD+Y7zU*Ik zYVSloI^YkhUz5ZZ5)z~%P==3Q#qt&Aa`@kRPlpNY{T>f#GE!JCL6&@2vXF;V=9ha; z7C&1nOPmk&V|pws%;`n{INz>6d;J)Q`XhYDx>D!+K%2v=n|@twan@5k6{{ zBv_4<#SgA1k*ac4zBh6+RAl}|7auB-?qXG5V#{WT>ypG7hn2|sA2$jj*7icAlnj

_YFa`TZq7dfR3%yui` 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 z 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 z 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 WTE`k_4ZNJR#_`7S-tiWF>v#u!z~4GP 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 Dp8jyw literal 0 HcmV?d00001 diff --git a/examples/runtime/meshes/tricube.bin b/examples/runtime/meshes/tricube.bin new file mode 100644 index 0000000000000000000000000000000000000000..81131b4864453eb24f3974731cbb66b7c346ae57 GIT binary patch literal 24175 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 b(!UU+r&NdCg~1Ku-Ut@Xty#>d6$Jke>$fp7 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_black.bin new file mode 100644 index 0000000000000000000000000000000000000000..d66f79aaf13a396a4adb9af04bfd5e8dfa958726 GIT binary patch literal 70 zcmZ<@_F!ZHg0lR~6ouTx%sd4RO|EJ#1%>pSc({2~Qgg|gIS6Ac4B104kv MLerY7mWzu40CJWPeEy{n~tKnmFIE1{g18(fr&radqC4n;()YUU1)Ud4Ab1UTjiUJs0gImxpAv z+SKtCk1yG;B+i>F9?wOca3&{YGlmormVU1d(+C;&rsZW5Gfccriy|#fYf`d`WjF%G z9FZm~x2&3bGi#L=tWn=S%&gic`I-o~?R=ZWt+5%9t(0g{6cuvP0<~(wXI`HBMo+d(QAcR2ppPfuPkYP#(_{gOUHe?wa zfMYl>ikd1~=O)5w$$%hjZxV!~QCA#74A6-IIss_?r)uc3Xb4p-hl*98Af$y?m{QdE zj$Y@nBR75h&Jx{&s05ur4|reA>!7>qYa77>k|jGr7b&h2;LwcW3so2rk=3orE3}82 zBvRee>!Rx`8&XSxW1HLop4UF(jeR+?9ro62!h{iqOE8nRWH+6Q1R3L_7FPejj zBdMx+#Ayjukf|(Ma;y&Y@-e4ZWyH>Z|65}_=d ztDco7E(!_hxtzRc9JwEmH*AXROR2qrCaP&VhOIk}eR%-A7b?hy zNSWnS#=8<1hl?K}w!ClRU9+iTy#Jun{{w&-GTs^>VgAf52tMR$1~hc0V>cMbw{FCT zCG^86!bd3Nb4OEm>|@Pmi8m8Hf<9nxGw>&c<0KTsF-*c+yhHiUo z#eM<0tNPTbs?+uP^~;Yx?f&_)-)8HwDny+WyF9Ie7qMT|Z^^1W{*mnbj|07aNS6_o z@@(_gd}^9>yHA>|+`jJ0=FfeTR`2hm<(I5Vm$dh{?e_k@bh*!y>T7wtx8)^UulIHO zV8^H8?=0Om4|aSl>x_`xfGrY)kR|!=wY3x?;%;eme<`t+h^J+lm$#hkk}4_c;AVIG zU49%KlIomoHv(*j;;=Ym>CyTa;bWVfWm#50bY-wbDw7>w^;3#3diMjASBwL7VEgWaRP(Z!2n9qgueAgA^MG&w+G{p|*E)WNO(r<9$ zSm?adSv=c-y`$S2^+?EUnWOq}FisL9;V@Vy*`A$El~QK@dP@+AK4{1&9N(M8L*Smp zE`H)e8zYk}S6sRLZ`kM=j&22)nOA2bK8eH~h+QekjrdJ&_HoU}FUQ`F`MnH-#txIi-{m24& z;8FlR;^(<;{LTzG`ho~GH4`%Hh?>9^N{JPtGsJnwu!^PKZU!^8JWS!CCqN;bs0vcA z6rg%k#ugVd%i#>0mt{>Aepkr6BUgeiCs7=REjd>NOXjBwRQhmR|64WAs%*M4oeVXu ziFRUe%(edPJVtUtQ9p!w22|x#QjcQ$!~GX)zx6^b^dySx)OVv(BzWTn;lM_^1E=Vl zJ}-*PTd8l0%SFBw#+eH}KzASk1xeF=%j2+HeebeCjz-kEzGT#R(%CW(GrOC6e5fQs zAAHC4FLN=2OHvi89##XZs3gm$CSD@@%+F!blF}tU*3H^Urew|3mH|tNezTkgB)!O{ z(n8I=lmh4&9I~}5kK#H>FbUAJeO*Y(tA=JIBL+R{=!k^Sxan%hG+D8y54S7NVhVbQ z8}x1;o2imAB=}rFI=+C#mi($O<69S|07_E8|9hj@`C(1e=aNG7-PuYHt`I{`H~Hc- zuEk&J&ZeS;0XG6EQ(OOFyhV??WY$4*S4GCy!PZY&F3o`ilp=D23|k`)-o4nRuRWj6k^6tU5oU%K4`MJ{bJ)A4s{);Q#;t literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_csm.bin new file mode 100644 index 0000000000000000000000000000000000000000..eb791864a71de53a13ab1a3e70a534a62ec0a6d5 GIT binary patch literal 5957 zcmcIo+iv4F5N%)c73`bbO%#*5*g~5Eiw%MnMbQP)cSCC{i2%uRCHcD8hyF)@q5s&K z5lNA<0=pK;84l0Pnc?u^@z?Jk{`v3U%pVs;{pYey z%EK#h`aUg_DX#r(KJQj$U9dV|fQ=J4Hx8*UPzst9T-@Dk*{y*ech`ePps`zu0j!1+AC*iqASajwCbApm z&~hi9Z=L5d!NB?JB?b)Cw%2%Kfs3#4Py_hGJ~Y^nP?l8HL5U$sz&|K47|_o~1N#w% zeQ7L(hTJQ#Yz^EESbL)kQ37hMyM@_0@T9$;c_B`l2L6D~# z4R^9xIF7TNNOHJqfT8``4dBz66*T~#Z0cp1K|{z z@*7LCDv>dM9w)Y%6E-VGjcYV7Mz(WAmls0wLNQw6IPNGKqoRwrF}j!=O5!|j$Ydk! zjXL&5#E+iCL?%7DCyi`^j3pHr>!pa^+aw963}<8)KD@ve??)A`sltbE=ZXNZj&KFT z>lIw#z-PqLIY5>UUCu2cJA*JbWjGZsbd+Wd=eDc7E^R!6HXY({s&}?JaWQ!~xQP%r zzp`kNbLnFfh|7X%!T{$6%XN|ALUW;o$|EkFT7xx5lFhL0P;i)B-WAaHcfb7P;0-|EXkn0@to?nRA8fG_iX|zz_h5a zf#`j+pq2v8&qsdXc@0dR(k<*3OJHuR{w{0Tc{F{eXw$q9N{up>?hV)t-cmQyZ_Ea| z#G}@3q2p0np;N%+N7wJH_0|UjKYW|rmgD3x^j?(ysH@WDTX?|7)9&)nVaGA9m*h%(d2WK^4YUdu^zud711TiIG zxDs{k;G*oUj)et@AW}~uI(3PmBCu|Z1?6HTYSjc`X>FLQK8^&?cVWVqiMuC~JWmuC%Anh9Y@j073z%$Y(d{V-o0|AO;OfpRXQxxFF z5LN^kV5DQfcqJrhd{t;zY0j+CXak?P`KFpnkxuk8^qTLJwq9$dt9NFCGlqw)Mz5xd z@h)m>eO#DRUA0wXV;dA>7vBf)NX8K$OpHf3j0lOLAK+hfUiTL$fxOebdbBSy0{6LQ t#(nM9ftMTsNcpZ8`aHlF7b74d699-x>*b4r#q#$WyiMin+tt-~{{uGU5g7mg literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..1431106b5ca250d114a28f243daaebc2ad3ac6b5 GIT binary patch literal 3057 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_linear_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..5233d5bbd0c2cf6c3770a48311e32410c5ec2d47 GIT binary patch literal 5988 zcmcIo+iv4F5N%)c73`b5>nNr!zF?68+YQndMcYNwmp&P)O(z0m%a!EoA`ktK{zCt; zGsBBWS=PqbbQf@Jab|RQ=5U7O{lgDm-~avZKbuv$$crT_ljS-SMR3P9)AA{q=ewVi z_2Au=9^Z;t2t$>qisTn?NV4C=yleQoY$LkH{}5T0@476$FN9b*1`#00(#NOjeN~Co zCaKbV^{~#XUpJK~+AVSTE-l0iZGT*?&fAIECQFKs`R<&_UAkCoO3`8Qe)(rAR#k_^ z$Gl7t$qCqH0#itn?5ENhLe9<5Dc@!&alDYHS)S#moUD@~S(d?xwS3OsU2T)%kggsX z<$F8brUG(gJ&f2EM6jRbc`=X9j)Z4N;MHfMxi81}tPNR~O9%ri5+Fp%(>Yrv>56&1 zt4~)9QAbS5mk>@NsCv3cX5v9)QV3IkLC-@*JblQwqDUUa6o50lru`#V+Xeh1+<38hl9K_=>{D}K(;134j zWH1ciJNE}Y37omILojBYkO)a`fu2T;yc%X>F#jAd>9DYqGjxIsF~}@~It~;9Fm}y6 zGWU|z!FwzOR+!(P5?CxMxiA5kYkr1_B>jo7^!pv{G1jU+h~28bSI}SB)L;08 z`s-34HBU*ptwFBppPdZu>aZ22P7yR@yXtWx^g6e}#cJgIVmTU@m+G;hNQ)k&LJso= zXEO+%rtAiAh2y6Art9qmwBL}xwMyhN_(T4A0O zood*&hN){`R04UVL^tp!w3C>`*gv~_uH~e*ALMkt?IK24f1%NXYN0mvpDNiO^5E zQiuA@ah`fi1#nqW)koWeU_Z-C4>s#(&-Wk!+*}U$D2l^S@4DTvYSHVkxZumbib|ac z$~*VnYQ# ziuLw%kiS4>JBx-mJ*{K`at xH=jNb+h@9rLTkP8fXM);jQnsI@fa_8tR#=^jKeZ?rbH{u5xCi=JYQXX^&ig>F{=Oo literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_esm_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..941093347b67ab9692c0e129318f4f26ef50a268 GIT binary patch literal 5945 zcmcIo&2Hm15N@w|3ic-NI*v$5{=p&zwi|3)6m1txFFhHmO(z0m%a!EcMGk$BzCz!z zGec4$Wm$=_=`P^dcF^~b;e{b#dE7FoVzMZ8?6G8cDjGc6wDdA9pG zUi#%HN}WO#(U<` z$BC2rCw@Eh`bwcGdpwoh^~iO}f_Yw39Q=P}8j=cQYP>gAZm*a&Mv~ObY=vi39Ij2ws1C~n4PC@G$fFC{W;9;L zHkWT4dKYv?wR7$h=M4PQS&MVc&4R8&yNTv2Yn~o8@yz-T_ZVwsAJ}eX-z)GhX!0-k zLjH9zkPc7fben@**FQTL+~r{_OcNqFknO6+E27u26&JIS^NZt0K2$&J(Xf^Q3%Df9S&jO((aB+=#M7wf)Ia!U={K6V-V+T6EsI<${X2 zF@)#ewO1R`_epat1L7W)Ril9C9P~#Bm1;NSKKtg@+(Ropz@qyL8;;P2kTxcKBw)*u z(5mSjDVI1lboDeguyWS;&8Y8oP#pJZ=ClFFD?--@BZCEWmKB~s*LJ}k?5Ml*`6!Hn zz_h)tSzT3(*#OKIf90ia%GI4hK<{V-pnXH2S96<0kkOI zDSve2ogbK^Z`d+{yN}6tbqS)AfG!+WeHI-0;W|J%+NaMDifTOwy#XnDa2xR`3QN4w zo>$$$Jx0%-3Dh-RQ#j!UkS1i#YIfgF-8(~f<6%O+qGD;LI&QrBgHeQOk0 zb;(8M-d;tYkI4YAz3Nv5l_KMj$gWbtu^Lf*0*+|NMkPdegbpIM&UX5?S_cYL1mtkd zjSypNuvzf{bT!fumRsv7roa;o^vKrR)0rDK1`nZooZV6FGf?TmMt5m5qHdRHSC4Sj zX*xFS!YHsXdd`D~I(yxr9U*aJM3vGkjOC)vQ&o%LsIsbT%Wa$T0ZWxf-ZdZKD32Tu zo~~GGJ&YmoVTXpl_RJ2qZh1LYzv(QYe4!+^?AlLqu3cxQX?Je9Sin)Jih}`rzqXzN zU90X?(`=zIR?!2~2V#kSjWg4BA(8tvxk*33QH|Y9&95T@eda~O#Bcguci06|kEWB>pF literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard.bin new file mode 100644 index 0000000000000000000000000000000000000000..162c3db65a5849872ed81c22b3467c4dcae76a0a GIT binary patch literal 2930 zcma)8$&TYT5KV4@zk<0*J+@lZ;st{aFi2xCK@ens&fQRK*{wi}BgtD2=HK(GL`tOH zHez4IrCvS0TFB2YUw-^)_s^GonQf}N5KU6-^0W?~#eUhmChO|>N3!!jj`aE=T}4>R zv+Zm9scqA8pR`$3zU->@&wZQL@9(7L=d4awwD-5NyuB}7?enDmS{-j~dCoSQeUskV z@u~PbOUw4oj;~dd5tA#jMS>$_N&b6dErmF7zqG!+lvqoo)2hm=YfW}ZofJ)QwY!^_ zA4i9zK4;}tKX6pSHeJG%Fh=4@_#T2SM79x*vtKHr-dQ|73F-N+D+ompu|TxN4t|$72Tkb_Kpcym zcRGtlo3M9uJEMUKnXPhU9~{Gzm}$^v$qt|QZ~4ZXxhYN(}h<#ni?qa1&XR*T?h!#TL-Cau^&+&1WpCW zBYu9;h2NWj$B+=AmS#p~y-+hiA(gme^oH<<2&=Pn+s(twErdA`1_2bqnaUtFqywr? zWo&7&umBg>ys8??@SBayJ8~xYau&s5*oku?uw;GugGwK;&A)Z)tgE(9)7e<_nrRS2 zW6t$Q=RT7YlKL*yGpH(1Ni~Y?clWg?$(1R$l(@>30kzm9H!Uvn^3Y?>EhPWs# zuUmbWTrT3RI4)fD15^hBP*7{SZFwB`tM6Slh|z>9*O$y1UpiW*Gqbw6#>c8fXva68 ze|ZuMKvGws?BQ-;C6(m%sfCw_KI?N>cB1rwk9D#3EmLyO)RqCa5fkSXwziHNFT0O9>pB;kT$5@ z;cRA?lp)dQ1k&dVxY-h}nwc_$t*qGrCAGkzuDYgy=5I8@ZNB`B3+-3BZ7JPgz$r{U zrORAs)%it6v0f0UkH7I?VCx6n=**`C!~kbQo}?S|70)@&b!Xt3PZb;2TDins8`{Xw zJ9YJ}$-eB2Cz6e7FI~bm9migFK%Y6h>Xo9GIS`KOVd<&e*C}3ua6dc;q2d3y;gL+x zKXPJkG4-QqI`QXJesK`b=NNPsupch`X@KwUb%CsQF0kpM&@T~5YFxi1s6^Qr1v`rA zPr<(Y!fDYNRn~IEx0LJs<(MeCc0I`g`a2m;&_zoE>BQr!O8|wwZ>1<`>5&6is K>G#p-hyMU0wVP8L<~9nPulJLxijyC<4_2^(kFH@(tNPzp`jU2?qLiEG1ua=aO}0pDnT}L zjC6+Wy%Z2^o6dw2j;9khm?T$jL_P?;FpBUHvR7Px>P|fTX7`Gp5h6?P6QZ=5sY3-; z_QF15Up|W@s}sf1>$ux>+}Y$!+CX&dP2eoUByY%`*RiKhjS9@oK+z2;I*Y%_+5BmV z*YT$gw6ZrE*c&l}M>Z3g2o84|*%00++=V!bVYl|#AW93wgVA{d5IyYZ1c<~y3!)Gf zimy$APX>%Oj#C|#4#=quq(21GH-H=-qo|tJoK34|(Rwg+Z$PVmnpOft)4Ip2O`qiQZoA&I z`3r{p1t<7ZW!>b@Kbt=ZFP>SKJCXlMpz0({yRmPBoC6yR2Kf005Dn~1Da|>@2{f!Z zn?TEMN@+z@)lEgK8DEF=tpZFVC6hr~fT}lo6ne$|1wax%d_Zqv%fXhuoAo1W!f{;d>PUhz~#P;)%02J^CZv~`E> zhvN-*v97!cLf_YMwAHGVt<_4Xt^cYT)l#-SzC=H$ZHu%T{ertC>b$R=)5dJkk)O17 z2WvY!xPd>d@X4BQJpfuf=jpa@n!m-})v#X0H&q@ulli*8XHA@tfvm%3bs zqma{$?6~L#hgppt3DgzcLR`sq6%zM*LD;abD1kW_=1lIEA6(qia*Z z)kANK>IS<=UpxEgPgnuv^v(&KP_-xuWzVr^Y4thFf)QTX(KjZ~qq_uKhlnl9jTiuvaw!Ld+MvpRMf5O@gN+ qc9QMV!=8e%KM7<=SLPlFFEkwhDy^>!44f734WiBE>-pm1yZ-=G`d3H* literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_hard_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..928ad3d19dec1a3b416143a7fce663428b2f1290 GIT binary patch literal 2942 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 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf.bin new file mode 100644 index 0000000000000000000000000000000000000000..64e30a57c29e4e21f1c92753681df44519293490 GIT binary patch literal 4282 zcmaJ^$!_CD5KV4@zM^xZ#xliC8wNHo7-KMlAcz6yPS7%CGa*HVq^!l5f6uGxh24^6 z`y#UT?N#yH!}ni*+x+u=yDnCBQ;9aKHf7#KcVe5iFWFPQ`!m}Fp9h-$nlBR~RS(2i zte@|*Cac;rhO&5m>ArMbzTReCQLi61b@$h{%bWK(iF{Wy`I2~ltk;+M^5wS7n)`Zp ziRG?Xt+s9c0mql>vB=lm2ORfxTaYJb&Q=*hD6;YoH{uv6F{CF)${}SAi4wW2%lbSg z8%}C;#x386p9im5b3pP1$`Om#^tH%$&dUTZW%-tM-N2(0fi-HKm3UnjPom0-weW_6 zw}B9=vd%iOtY7mcd(Kms5@aM2UA2LZ6g~;_TihT5<*R=@5~-I2G4RnjLKG|Ec|GGn z+}w!J4~9eW2CAz+CIMq1h7!+-#NQvp*bUC#4W*D{+gq0CP#A_KaVcSy*Wxb}J?t22Vf_o%j=iKT49%(D2!F-K~tbB3(ZmYI@_Yz1X# zW@(w8XxXMb?RscXqN7x)WxcQpkG>&dotim`nMBQ@3a#V{!X7HD zVv+22FbhY+0vh@RC=chVgVZAhsD3J8Cl?`yVtfh%urKSDdi)~n`8)1~Ae<$WIF{)- zNpZ--)~gMnw*9Z^yr;S|jXED`&*oZ*m1XYsvG=hjd$je3t{&j3QW}Ol1s^LsI{eN9 z4bdl26?*LnsQn4G>cDwpSrLAKWr71urnLqGxs1Qn zr+Q!wEQgGnIw3K`iGFgF#y-IbIz-~3&OMC5J9Z9%Z|a>mEfYi{%x&Kp5v54GW|d=# z^eEE+#F4!jTR=5Qv8JnY%2>>i9?A{ow~x(6$}l1KxrKCmz;1H9cWtIs7!V0<5DWj8$t!r_tZb^MZ1eQ7$l5eyOx3@^txto{ z->cfg%x1Zgr)3&3+&V8<===s%eUo>-8kygR^|neQ z9w#R8BX^*Tp~>5A*`*P8l-;J0UH?ed|NKx!Zjo6`5*-(G1ohd`UfDH`xTcyi#ax>K zjHaqA#v??AK_G?XxfbFQnFsKI2%tL6p6af>jMqvM%d4zhmX;kti3E><^hhq&-AhsC zSYgdJ*DIbpJfx9YuY4A;@U2iD04UxN3H?3dVEdQCQkW@NlIW{{0L5zGo7Ef#46qVH$!%rdW+0fA3}o9dpkoqUnpiFTUM%#FJIGO6$qh-s zCL_0*&_jeSs;DucvNImgLdfB?y;0+Mz->>7)w-yB-swPJ8FFaU*j?xK5Bg$OM@zo% zwoQ(&N$NQBIf*T7?9o7sjsA!>1mEI`H}MzKAerXZ0gj%~pG1@S91rr=4&p^HjqqE3 zNML#O`G|bF2Q|RZanM_XdVM#UHuAVTFperXUd)0~fwIAUsj25nJGNJEOkXVh(I#(F z#ADsr&t>`z-&SAg!;fM4M&3uLOKgfRR~quftJs8w)kRx~KN=-UEQ(%e;HJr(X zWwB!K_H`QLs}E+a^& xnum_13)) { + break; + }; + y_18 = -(ynum_12); + while (true) { + if ((y_18 > ynum_12)) { + break; + }; + vec2 tmpvar_19; + tmpvar_19.x = float(x_11); + tmpvar_19.y = float(y_18); + vec4 tmpvar_20; + tmpvar_20.zw = vec2(0.0, 0.0); + tmpvar_20.xy = ((tmpvar_19 * _pcfParams_9.zw) * _texelSize_10); + vec4 tmpvar_21; + tmpvar_21 = (_shadowCoord_7 + tmpvar_20); + result_14 = (result_14 + float((dot (texture2D (u_shadowMap0, (tmpvar_21.xy / tmpvar_21.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_21.z - _bias_8) / tmpvar_21.w)))); + y_18 = (y_18 + 1); + }; + x_11 = (x_11 + 1); + }; + visibility_1 = (result_14 / max (tmpvar_16, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_22; + tmpvar_22 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_23; + tmpvar_23 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_22, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_22, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_24; + tmpvar_24.x = tmpvar_23; + tmpvar_24.y = tmpvar_23; + tmpvar_24.z = -(tmpvar_23); + colorCoverage_2 = tmpvar_24; + vec4 _shadowCoord_25; + _shadowCoord_25 = v_texcoord2; + float _bias_26; + _bias_26 = u_params1.x; + vec4 _pcfParams_27; + _pcfParams_27 = u_smSamplingParams; + vec2 _texelSize_28; + _texelSize_28 = (u_params2.zz / 2.0); + int x_29; + int ynum_30; + int xnum_31; + float result_32; + vec2 tmpvar_33; + tmpvar_33 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_34; + tmpvar_34 = (tmpvar_33.x * tmpvar_33.y); + result_32 = 0.0; + int tmpvar_35; + tmpvar_35 = int(u_smSamplingParams.x); + xnum_31 = tmpvar_35; + ynum_30 = int(u_smSamplingParams.y); + x_29 = -(tmpvar_35); + while (true) { + int y_36; + if ((x_29 > xnum_31)) { + break; + }; + y_36 = -(ynum_30); + while (true) { + if ((y_36 > ynum_30)) { + break; + }; + vec2 tmpvar_37; + tmpvar_37.x = float(x_29); + tmpvar_37.y = float(y_36); + vec4 tmpvar_38; + tmpvar_38.zw = vec2(0.0, 0.0); + tmpvar_38.xy = ((tmpvar_37 * _pcfParams_27.zw) * _texelSize_28); + vec4 tmpvar_39; + tmpvar_39 = (_shadowCoord_25 + tmpvar_38); + result_32 = (result_32 + float((dot (texture2D (u_shadowMap1, (tmpvar_39.xy / tmpvar_39.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_39.z - _bias_26) / tmpvar_39.w)))); + y_36 = (y_36 + 1); + }; + x_29 = (x_29 + 1); + }; + visibility_1 = (result_32 / max (tmpvar_34, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_40; + tmpvar_40 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_41; + tmpvar_41 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_40, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_40, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_42; + tmpvar_42.x = -(tmpvar_41); + tmpvar_42.y = -(tmpvar_41); + tmpvar_42.z = tmpvar_41; + colorCoverage_2 = tmpvar_42; + vec4 _shadowCoord_43; + _shadowCoord_43 = v_texcoord3; + float _bias_44; + _bias_44 = u_params1.x; + vec4 _pcfParams_45; + _pcfParams_45 = u_smSamplingParams; + vec2 _texelSize_46; + _texelSize_46 = (u_params2.zz / 3.0); + int x_47; + int ynum_48; + int xnum_49; + float result_50; + vec2 tmpvar_51; + tmpvar_51 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_52; + tmpvar_52 = (tmpvar_51.x * tmpvar_51.y); + result_50 = 0.0; + int tmpvar_53; + tmpvar_53 = int(u_smSamplingParams.x); + xnum_49 = tmpvar_53; + ynum_48 = int(u_smSamplingParams.y); + x_47 = -(tmpvar_53); + while (true) { + int y_54; + if ((x_47 > xnum_49)) { + break; + }; + y_54 = -(ynum_48); + while (true) { + if ((y_54 > ynum_48)) { + break; + }; + vec2 tmpvar_55; + tmpvar_55.x = float(x_47); + tmpvar_55.y = float(y_54); + vec4 tmpvar_56; + tmpvar_56.zw = vec2(0.0, 0.0); + tmpvar_56.xy = ((tmpvar_55 * _pcfParams_45.zw) * _texelSize_46); + vec4 tmpvar_57; + tmpvar_57 = (_shadowCoord_43 + tmpvar_56); + result_50 = (result_50 + float((dot (texture2D (u_shadowMap2, (tmpvar_57.xy / tmpvar_57.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_57.z - _bias_44) / tmpvar_57.w)))); + y_54 = (y_54 + 1); + }; + x_47 = (x_47 + 1); + }; + visibility_1 = (result_50 / max (tmpvar_52, 1.0)); + } else { + vec2 tmpvar_58; + tmpvar_58 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_59; + tmpvar_59 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_58, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_58, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_60; + tmpvar_60.x = tmpvar_59; + tmpvar_60.y = -(tmpvar_59); + tmpvar_60.z = -(tmpvar_59); + colorCoverage_2 = tmpvar_60; + vec4 _shadowCoord_61; + _shadowCoord_61 = v_texcoord4; + float _bias_62; + _bias_62 = u_params1.x; + vec4 _pcfParams_63; + _pcfParams_63 = u_smSamplingParams; + vec2 _texelSize_64; + _texelSize_64 = (u_params2.zz / 4.0); + int x_65; + int ynum_66; + int xnum_67; + float result_68; + vec2 tmpvar_69; + tmpvar_69 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_70; + tmpvar_70 = (tmpvar_69.x * tmpvar_69.y); + result_68 = 0.0; + int tmpvar_71; + tmpvar_71 = int(u_smSamplingParams.x); + xnum_67 = tmpvar_71; + ynum_66 = int(u_smSamplingParams.y); + x_65 = -(tmpvar_71); + while (true) { + int y_72; + if ((x_65 > xnum_67)) { + break; + }; + y_72 = -(ynum_66); + while (true) { + if ((y_72 > ynum_66)) { + break; + }; + vec2 tmpvar_73; + tmpvar_73.x = float(x_65); + tmpvar_73.y = float(y_72); + vec4 tmpvar_74; + tmpvar_74.zw = vec2(0.0, 0.0); + tmpvar_74.xy = ((tmpvar_73 * _pcfParams_63.zw) * _texelSize_64); + vec4 tmpvar_75; + tmpvar_75 = (_shadowCoord_61 + tmpvar_74); + result_68 = (result_68 + float((dot (texture2D (u_shadowMap3, (tmpvar_75.xy / tmpvar_75.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_75.z - _bias_62) / tmpvar_75.w)))); + y_72 = (y_72 + 1); + }; + x_65 = (x_65 + 1); + }; + visibility_1 = (result_68 / max (tmpvar_70, 1.0)); + }; + }; + }; + vec3 tmpvar_76; + tmpvar_76 = -(normalize(v_view)); + vec3 tmpvar_77; + float tmpvar_78; + tmpvar_77 = -(normalize(u_lightPosition.xyz)); + tmpvar_78 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_79; + tmpvar_79 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_80; + tmpvar_80 = normalize(tmpvar_79); + tmpvar_77 = tmpvar_80; + float tmpvar_81; + tmpvar_81 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_82; + tmpvar_82 = sqrt(dot (tmpvar_79, tmpvar_79)); + tmpvar_78 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_82)) + ((u_lightAttenuationSpotOuter.z * tmpvar_82) * tmpvar_82)))) * mix (clamp (((max (0.0, dot (-(tmpvar_80), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_81) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_81)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_83; + tmpvar_83 = dot (v_normal, tmpvar_77); + vec2 tmpvar_84; + tmpvar_84.x = tmpvar_83; + tmpvar_84.y = (((float((tmpvar_83 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_83) * v_normal) - tmpvar_77), tmpvar_76)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_85; + tmpvar_85 = (max (tmpvar_84, 0.0) * tmpvar_78); + float tmpvar_86; + tmpvar_86 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_85.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_85.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_86) * tmpvar_86)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..c85ba2e1728c4e596780d56d48593c83d6527684 GIT binary patch literal 4443 zcmaJ^$!_CD5KV4@zoK)aywGeeS}?GI!3+j72!a@J?gTB_p7G=Yu%Ua`;>J3wQ9>b(f(L2Pt%q2bzQV~ z&E^!z*XrqM-IX6ud|o_M<+A^P;;!i`vgF9vMFAJ8qW;78H~}Q~>e1u!t_tspfSfmV zbBxJ~L5+{7)w%q1_FA+%fG-e^M7-v&Rk`sFQyi-B&6}o$MF$K^#JZ?)+*FTZQB+G2 zjLzQ9gm|i(q8Ib#wQP&$GKVTbN@CG3R*;dyCSiYz8+f2?4flIZo0|K?p-sXKsAY&$ zviwQ7-Qh6sOr^7H-}-Pf^0@Y3@_CL_rw&7^)Ep-*&ONd{nHao7hl}@38gK$Rl;z|Sze^4xU!E;+uuKoQ|AT}C&0_>8*5k%oE zyM)SFHo~8{P=RC4y6n2sY!S0X%r+X4i0G2yG7{(boifrt2^LN*tvGXV%EB!SA3XQ2 zD4tiraOnmv3n_3%x2~SCBW%pXDp9L_i7cTkAF)K2XF@zGZMC&iN6O?t$~x!HWC|RB z?v+Tx3woWU97w<;ey23|*>!6NV45dygY4g zm2<6M>TY2)pOAffBW93E4Tdt6yMmutZikl%5`ZCk%@r&*_7hXIc8o~3K}&RKCx<~n!^|2eon1iVCizg^#o7VVJaj+J_Gn6a|B+CsG z$Habs2AAkehffThPFv-#0}}IVR8Dg%QwT`V*d`vUS-N?t>Jme%U6*FAGt_ya=P~aB z%zP`f1?UWK@Pz&zu&ez`Zs{f|#15RSN880H3h|B}U_lEbGu)csIdef{EiKOs~ z0#c||cxi9NcouNl6R@U4DSW|U1z*_f*otwpE*L({rmWYLa@()l63<=AIQ!nk*tPo5 zT`;bPPmBcK!P6iMXX7Xxmsio0#%dO4(d0hq_P9$sGZ|UEVwHW8l0Er_IOGs?yOBxa13jjT14TGvs^#d`8PcNzR=5*`|yq0 zh!B^=23^fC;KZ}nx`tUrV~1b0sx4!A8*V4)DcV&zRTIh~#h@MHbd6^z7B5X5Gs3)z zF!*Fhn$bTQa`+2)L#<}b*dqHJqv$!0uIr%Ou40&&hRHaU8O09_CLXCX(UO!lA?L-! R(eTjP09<}O{5(7R<$o#&T$lg= literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin new file mode 100644 index 000000000..881bf86a3 --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_csm.bin @@ -0,0 +1,321 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_smSamplingParams; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + vec2 tmpvar_3; + tmpvar_3 = u_params2.zz; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_4; + tmpvar_4 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_5; + tmpvar_5 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_4, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_4, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_6; + tmpvar_6.x = -(tmpvar_5); + tmpvar_6.y = tmpvar_5; + tmpvar_6.z = -(tmpvar_5); + colorCoverage_2 = tmpvar_6; + vec4 tmpvar_7; + tmpvar_7.w = 1.0; + tmpvar_7.xy = (v_texcoord1.xy / v_texcoord1.w); + tmpvar_7.z = v_texcoord1.z; + vec4 tmpvar_8; + tmpvar_8.xy = u_smSamplingParams.xy; + tmpvar_8.zw = (u_smSamplingParams.zw / v_texcoord1.w); + vec4 _shadowCoord_9; + _shadowCoord_9 = tmpvar_7; + float _bias_10; + _bias_10 = u_params1.x; + vec4 _pcfParams_11; + _pcfParams_11 = tmpvar_8; + vec2 _texelSize_12; + _texelSize_12 = tmpvar_3; + int x_13; + int ynum_14; + int xnum_15; + float result_16; + vec2 tmpvar_17; + tmpvar_17 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_18; + tmpvar_18 = (tmpvar_17.x * tmpvar_17.y); + result_16 = 0.0; + int tmpvar_19; + tmpvar_19 = int(u_smSamplingParams.x); + xnum_15 = tmpvar_19; + ynum_14 = int(u_smSamplingParams.y); + x_13 = -(tmpvar_19); + while (true) { + int y_20; + if ((x_13 > xnum_15)) { + break; + }; + y_20 = -(ynum_14); + while (true) { + if ((y_20 > ynum_14)) { + break; + }; + vec2 tmpvar_21; + tmpvar_21.x = float(x_13); + tmpvar_21.y = float(y_20); + vec4 tmpvar_22; + tmpvar_22.zw = vec2(0.0, 0.0); + tmpvar_22.xy = ((tmpvar_21 * _pcfParams_11.zw) * _texelSize_12); + vec4 tmpvar_23; + tmpvar_23 = (_shadowCoord_9 + tmpvar_22); + result_16 = (result_16 + float((dot (texture2D (u_shadowMap0, (tmpvar_23.xy / tmpvar_23.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_23.z - _bias_10) / tmpvar_23.w)))); + y_20 = (y_20 + 1); + }; + x_13 = (x_13 + 1); + }; + visibility_1 = (result_16 / max (tmpvar_18, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_24; + tmpvar_24 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_25; + tmpvar_25 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_24, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_24, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_26; + tmpvar_26.x = tmpvar_25; + tmpvar_26.y = tmpvar_25; + tmpvar_26.z = -(tmpvar_25); + colorCoverage_2 = tmpvar_26; + vec4 tmpvar_27; + tmpvar_27.w = 1.0; + tmpvar_27.xy = (v_texcoord2.xy / v_texcoord2.w); + tmpvar_27.z = v_texcoord2.z; + vec4 tmpvar_28; + tmpvar_28.xy = u_smSamplingParams.xy; + tmpvar_28.zw = (u_smSamplingParams.zw / v_texcoord2.w); + vec4 _shadowCoord_29; + _shadowCoord_29 = tmpvar_27; + float _bias_30; + _bias_30 = u_params1.x; + vec4 _pcfParams_31; + _pcfParams_31 = tmpvar_28; + vec2 _texelSize_32; + _texelSize_32 = (u_params2.zz / 2.0); + int x_33; + int ynum_34; + int xnum_35; + float result_36; + vec2 tmpvar_37; + tmpvar_37 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_38; + tmpvar_38 = (tmpvar_37.x * tmpvar_37.y); + result_36 = 0.0; + int tmpvar_39; + tmpvar_39 = int(u_smSamplingParams.x); + xnum_35 = tmpvar_39; + ynum_34 = int(u_smSamplingParams.y); + x_33 = -(tmpvar_39); + while (true) { + int y_40; + if ((x_33 > xnum_35)) { + break; + }; + y_40 = -(ynum_34); + while (true) { + if ((y_40 > ynum_34)) { + break; + }; + vec2 tmpvar_41; + tmpvar_41.x = float(x_33); + tmpvar_41.y = float(y_40); + vec4 tmpvar_42; + tmpvar_42.zw = vec2(0.0, 0.0); + tmpvar_42.xy = ((tmpvar_41 * _pcfParams_31.zw) * _texelSize_32); + vec4 tmpvar_43; + tmpvar_43 = (_shadowCoord_29 + tmpvar_42); + result_36 = (result_36 + float((dot (texture2D (u_shadowMap1, (tmpvar_43.xy / tmpvar_43.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_43.z - _bias_30) / tmpvar_43.w)))); + y_40 = (y_40 + 1); + }; + x_33 = (x_33 + 1); + }; + visibility_1 = (result_36 / max (tmpvar_38, 1.0)); + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_44; + tmpvar_44 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_45; + tmpvar_45 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_44, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_44, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_46; + tmpvar_46.x = -(tmpvar_45); + tmpvar_46.y = -(tmpvar_45); + tmpvar_46.z = tmpvar_45; + colorCoverage_2 = tmpvar_46; + vec4 tmpvar_47; + tmpvar_47.w = 1.0; + tmpvar_47.xy = (v_texcoord3.xy / v_texcoord3.w); + tmpvar_47.z = v_texcoord3.z; + vec4 tmpvar_48; + tmpvar_48.xy = u_smSamplingParams.xy; + tmpvar_48.zw = (u_smSamplingParams.zw / v_texcoord3.w); + vec4 _shadowCoord_49; + _shadowCoord_49 = tmpvar_47; + float _bias_50; + _bias_50 = u_params1.x; + vec4 _pcfParams_51; + _pcfParams_51 = tmpvar_48; + vec2 _texelSize_52; + _texelSize_52 = (u_params2.zz / 3.0); + int x_53; + int ynum_54; + int xnum_55; + float result_56; + vec2 tmpvar_57; + tmpvar_57 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_58; + tmpvar_58 = (tmpvar_57.x * tmpvar_57.y); + result_56 = 0.0; + int tmpvar_59; + tmpvar_59 = int(u_smSamplingParams.x); + xnum_55 = tmpvar_59; + ynum_54 = int(u_smSamplingParams.y); + x_53 = -(tmpvar_59); + while (true) { + int y_60; + if ((x_53 > xnum_55)) { + break; + }; + y_60 = -(ynum_54); + while (true) { + if ((y_60 > ynum_54)) { + break; + }; + vec2 tmpvar_61; + tmpvar_61.x = float(x_53); + tmpvar_61.y = float(y_60); + vec4 tmpvar_62; + tmpvar_62.zw = vec2(0.0, 0.0); + tmpvar_62.xy = ((tmpvar_61 * _pcfParams_51.zw) * _texelSize_52); + vec4 tmpvar_63; + tmpvar_63 = (_shadowCoord_49 + tmpvar_62); + result_56 = (result_56 + float((dot (texture2D (u_shadowMap2, (tmpvar_63.xy / tmpvar_63.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_63.z - _bias_50) / tmpvar_63.w)))); + y_60 = (y_60 + 1); + }; + x_53 = (x_53 + 1); + }; + visibility_1 = (result_56 / max (tmpvar_58, 1.0)); + } else { + vec2 tmpvar_64; + tmpvar_64 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_65; + tmpvar_65 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_64, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_64, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_66; + tmpvar_66.x = tmpvar_65; + tmpvar_66.y = -(tmpvar_65); + tmpvar_66.z = -(tmpvar_65); + colorCoverage_2 = tmpvar_66; + vec4 tmpvar_67; + tmpvar_67.w = 1.0; + tmpvar_67.xy = (v_texcoord4.xy / v_texcoord4.w); + tmpvar_67.z = v_texcoord4.z; + vec4 tmpvar_68; + tmpvar_68.xy = u_smSamplingParams.xy; + tmpvar_68.zw = (u_smSamplingParams.zw / v_texcoord4.w); + vec4 _shadowCoord_69; + _shadowCoord_69 = tmpvar_67; + float _bias_70; + _bias_70 = u_params1.x; + vec4 _pcfParams_71; + _pcfParams_71 = tmpvar_68; + vec2 _texelSize_72; + _texelSize_72 = (u_params2.zz / 4.0); + int x_73; + int ynum_74; + int xnum_75; + float result_76; + vec2 tmpvar_77; + tmpvar_77 = ((u_smSamplingParams.xy * 2.0) + 1.0); + float tmpvar_78; + tmpvar_78 = (tmpvar_77.x * tmpvar_77.y); + result_76 = 0.0; + int tmpvar_79; + tmpvar_79 = int(u_smSamplingParams.x); + xnum_75 = tmpvar_79; + ynum_74 = int(u_smSamplingParams.y); + x_73 = -(tmpvar_79); + while (true) { + int y_80; + if ((x_73 > xnum_75)) { + break; + }; + y_80 = -(ynum_74); + while (true) { + if ((y_80 > ynum_74)) { + break; + }; + vec2 tmpvar_81; + tmpvar_81.x = float(x_73); + tmpvar_81.y = float(y_80); + vec4 tmpvar_82; + tmpvar_82.zw = vec2(0.0, 0.0); + tmpvar_82.xy = ((tmpvar_81 * _pcfParams_71.zw) * _texelSize_72); + vec4 tmpvar_83; + tmpvar_83 = (_shadowCoord_69 + tmpvar_82); + result_76 = (result_76 + float((dot (texture2D (u_shadowMap3, (tmpvar_83.xy / tmpvar_83.w)), vec4(5.96046e-08, 1.52588e-05, 0.00390625, 1.0)) >= ((tmpvar_83.z - _bias_70) / tmpvar_83.w)))); + y_80 = (y_80 + 1); + }; + x_73 = (x_73 + 1); + }; + visibility_1 = (result_76 / max (tmpvar_78, 1.0)); + }; + }; + }; + vec3 tmpvar_84; + tmpvar_84 = -(normalize(v_view)); + vec3 tmpvar_85; + float tmpvar_86; + tmpvar_85 = -(normalize(u_lightPosition.xyz)); + tmpvar_86 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_87; + tmpvar_87 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_88; + tmpvar_88 = normalize(tmpvar_87); + tmpvar_85 = tmpvar_88; + float tmpvar_89; + tmpvar_89 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_90; + tmpvar_90 = sqrt(dot (tmpvar_87, tmpvar_87)); + tmpvar_86 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_90)) + ((u_lightAttenuationSpotOuter.z * tmpvar_90) * tmpvar_90)))) * mix (clamp (((max (0.0, dot (-(tmpvar_88), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_89) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_89)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_91; + tmpvar_91 = dot (v_normal, tmpvar_85); + vec2 tmpvar_92; + tmpvar_92.x = tmpvar_91; + tmpvar_92.y = (((float((tmpvar_91 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_91) * v_normal) - tmpvar_85), tmpvar_84)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_93; + tmpvar_93 = (max (tmpvar_92, 0.0) * tmpvar_86); + float tmpvar_94; + tmpvar_94 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_93.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_93.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_94) * tmpvar_94)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_linear_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..8248ab63bd4ad6ea7dbcd8b14656c8a125f0a46d GIT binary patch literal 7385 zcmcIo*>2lL6m4Jq71K8=(Z=CW3jzm76QnJQwn5#OJ`s#OvWZfnN>SDlzhqc{j#fM*}W5&-(;m+;NBnB>+}2MVwb1oyJCNC%bRSu z+->EB9j{jJGr6uV?08pfGt{J|>?#ElvNZqEw-|$Bm)ZfbOKFSYqR5N3Pd4OK-rB9c zhcB)k(((w-X9S3cbLxM?DZ8vbML9Wci$t|WlI(W&F$d-YpX=B$3B2gjNRqQTZq|f z#5uYiv_sGa6e)mcwJRm$I|y2x@cJyM;Tr-K8##CmhoA-c1V9wT!}(+^CUP*I^;tNK zc|4oJOWbGU;dmU)#}f|E;c(njiZdT}sEj=)1VVxvH)h1>SL@jrwtq@7MX+>(Gx3;A zkjWy4>qi=S$0)db&>OObv`86HQ?D4)Mh37vIR~5aZk;Y#id6n#6u>%xK zn@)s*JS$LGgna>w@g~OjXJPCT$|$8Fs4%9+do$&Bi?kVnq()|^dWOWq+T48AVVNVN zC!r0_(G$^TC?1D4A8#QvH|Pv&c{nD_8TH$%4(6K10<8zTxyCDNR*xEZM!ttV#yZgl zygSkN1@IR&@fUq2{w^Vqil=hAi@{LmKQ|bmkHbziO^Bc%yIC)^K(AxVpNz&Zd@>v@ z$z$=@K&0ayjlvM@2F-0c3%LbWZCgay@KbvbpN6aBptFfFwAwTf`UOBInxGT^Bj~6@ z=>VPc-S|cLpzBog9O!hxb}>v<`$;J<6dH8n;hZ{&d5rb*a?N#!bo)U>=gThY2vrAhdMyopY3ZK1+^Z8-Y6OO;9LY0g%w@_oG0DG z+;=%p0~+f>(%T7{C(WI6Xxf1(78{exZrZb#*K7_vG1DVlDb@KXaC05UTt_Z4_Z)Tf zLzC-lf6v`q$7gO<=N{J?<#WJ@R@pdlit3Se5V1|M*VBC+C?Mf*hHGq0F}6lGHy$B4 z$gl-#`|j1%7CQi-BVNzjD0Zk1F0T?nC?a{avy7#tvM@*qo-Grhwv+&Bt~ zqm=;1*`7NQ>QGpXz%)QVx(+orL=+bL0()Q)aM9{26rv8w-r7ro=(ShQQ!7-UBVmut zPaTBKI>NTY#*H!MRh2nWZ7tvSlOm?KJq>RDrE&P_D4@ z&@81gGxTuvY6v++n;LOdq@1l#Z0k6U)J42;47c~aG?1bqBF0}-r1=C#6T~(LI#kSz yVn?j@rqiQdR30`QG!?^WBElFi&Yes)b84HIVT7C;WD1JsG&~|SQhdC+`s!a|1k4ox literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_pcf_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..9473f5f3d8275f9643b87d71a6c595cf269b349a GIT binary patch literal 7153 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 PlaT`w$SwNb>;3RQ@!*bM literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin new file mode 100644 index 000000000..ec100c779 --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_csm.bin @@ -0,0 +1,194 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_3; + tmpvar_3 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_4; + tmpvar_4 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_3, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_3, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_5; + tmpvar_5.x = -(tmpvar_4); + tmpvar_5.y = tmpvar_4; + tmpvar_5.z = -(tmpvar_4); + colorCoverage_2 = tmpvar_5; + float tmpvar_6; + float tmpvar_7; + tmpvar_7 = (((v_texcoord1.z - u_params1.x) / v_texcoord1.w) * u_params1.w); + vec2 tmpvar_8; + tmpvar_8 = (v_texcoord1.xy / v_texcoord1.w); + vec4 tmpvar_9; + tmpvar_9 = texture2D (u_shadowMap0, tmpvar_8); + vec2 tmpvar_10; + tmpvar_10.x = dot (tmpvar_9.xy, vec2(0.00390625, 1.0)); + tmpvar_10.y = dot (tmpvar_9.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_11; + tmpvar_11 = (tmpvar_10 * u_params1.w); + if ((tmpvar_7 < tmpvar_11.x)) { + tmpvar_6 = 1.0; + } else { + float tmpvar_12; + tmpvar_12 = max ((tmpvar_11.y - (tmpvar_11.x * tmpvar_11.x)), u_params1.z); + float tmpvar_13; + tmpvar_13 = (tmpvar_7 - tmpvar_11.x); + tmpvar_6 = mix ((tmpvar_12 / (tmpvar_12 + (tmpvar_13 * tmpvar_13))), 1.0, float(any(greaterThan (tmpvar_8, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_6; + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_14; + tmpvar_14 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_15; + tmpvar_15 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_14, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_14, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_16; + tmpvar_16.x = tmpvar_15; + tmpvar_16.y = tmpvar_15; + tmpvar_16.z = -(tmpvar_15); + colorCoverage_2 = tmpvar_16; + float tmpvar_17; + float tmpvar_18; + tmpvar_18 = (((v_texcoord2.z - u_params1.x) / v_texcoord2.w) * u_params1.w); + vec2 tmpvar_19; + tmpvar_19 = (v_texcoord2.xy / v_texcoord2.w); + vec4 tmpvar_20; + tmpvar_20 = texture2D (u_shadowMap1, tmpvar_19); + vec2 tmpvar_21; + tmpvar_21.x = dot (tmpvar_20.xy, vec2(0.00390625, 1.0)); + tmpvar_21.y = dot (tmpvar_20.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 * u_params1.w); + if ((tmpvar_18 < tmpvar_22.x)) { + tmpvar_17 = 1.0; + } else { + float tmpvar_23; + tmpvar_23 = max ((tmpvar_22.y - (tmpvar_22.x * tmpvar_22.x)), u_params1.z); + float tmpvar_24; + tmpvar_24 = (tmpvar_18 - tmpvar_22.x); + tmpvar_17 = mix ((tmpvar_23 / (tmpvar_23 + (tmpvar_24 * tmpvar_24))), 1.0, float(any(greaterThan (tmpvar_19, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_17; + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_25; + tmpvar_25 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_26; + tmpvar_26 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_25, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_25, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_27; + tmpvar_27.x = -(tmpvar_26); + tmpvar_27.y = -(tmpvar_26); + tmpvar_27.z = tmpvar_26; + colorCoverage_2 = tmpvar_27; + float tmpvar_28; + float tmpvar_29; + tmpvar_29 = (((v_texcoord3.z - u_params1.x) / v_texcoord3.w) * u_params1.w); + vec2 tmpvar_30; + tmpvar_30 = (v_texcoord3.xy / v_texcoord3.w); + vec4 tmpvar_31; + tmpvar_31 = texture2D (u_shadowMap2, tmpvar_30); + vec2 tmpvar_32; + tmpvar_32.x = dot (tmpvar_31.xy, vec2(0.00390625, 1.0)); + tmpvar_32.y = dot (tmpvar_31.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_33; + tmpvar_33 = (tmpvar_32 * u_params1.w); + if ((tmpvar_29 < tmpvar_33.x)) { + tmpvar_28 = 1.0; + } else { + float tmpvar_34; + tmpvar_34 = max ((tmpvar_33.y - (tmpvar_33.x * tmpvar_33.x)), u_params1.z); + float tmpvar_35; + tmpvar_35 = (tmpvar_29 - tmpvar_33.x); + tmpvar_28 = mix ((tmpvar_34 / (tmpvar_34 + (tmpvar_35 * tmpvar_35))), 1.0, float(any(greaterThan (tmpvar_30, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_28; + } else { + vec2 tmpvar_36; + tmpvar_36 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_37; + tmpvar_37 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_36, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_36, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_38; + tmpvar_38.x = tmpvar_37; + tmpvar_38.y = -(tmpvar_37); + tmpvar_38.z = -(tmpvar_37); + colorCoverage_2 = tmpvar_38; + float tmpvar_39; + float tmpvar_40; + tmpvar_40 = (((v_texcoord4.z - u_params1.x) / v_texcoord4.w) * u_params1.w); + vec2 tmpvar_41; + tmpvar_41 = (v_texcoord4.xy / v_texcoord4.w); + vec4 tmpvar_42; + tmpvar_42 = texture2D (u_shadowMap3, tmpvar_41); + vec2 tmpvar_43; + tmpvar_43.x = dot (tmpvar_42.xy, vec2(0.00390625, 1.0)); + tmpvar_43.y = dot (tmpvar_42.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_44; + tmpvar_44 = (tmpvar_43 * u_params1.w); + if ((tmpvar_40 < tmpvar_44.x)) { + tmpvar_39 = 1.0; + } else { + float tmpvar_45; + tmpvar_45 = max ((tmpvar_44.y - (tmpvar_44.x * tmpvar_44.x)), u_params1.z); + float tmpvar_46; + tmpvar_46 = (tmpvar_40 - tmpvar_44.x); + tmpvar_39 = mix ((tmpvar_45 / (tmpvar_45 + (tmpvar_46 * tmpvar_46))), 1.0, float(any(greaterThan (tmpvar_41, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_39; + }; + }; + }; + vec3 tmpvar_47; + tmpvar_47 = -(normalize(v_view)); + vec3 tmpvar_48; + float tmpvar_49; + tmpvar_48 = -(normalize(u_lightPosition.xyz)); + tmpvar_49 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_50; + tmpvar_50 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_51; + tmpvar_51 = normalize(tmpvar_50); + tmpvar_48 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_53; + tmpvar_53 = sqrt(dot (tmpvar_50, tmpvar_50)); + tmpvar_49 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_53)) + ((u_lightAttenuationSpotOuter.z * tmpvar_53) * tmpvar_53)))) * mix (clamp (((max (0.0, dot (-(tmpvar_51), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_52) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_52)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_54; + tmpvar_54 = dot (v_normal, tmpvar_48); + vec2 tmpvar_55; + tmpvar_55.x = tmpvar_54; + tmpvar_55.y = (((float((tmpvar_54 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_54) * v_normal) - tmpvar_48), tmpvar_47)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_56; + tmpvar_56 = (max (tmpvar_55, 0.0) * tmpvar_49); + float tmpvar_57; + tmpvar_57 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_56.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_56.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_57) * tmpvar_57)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..28667a5aa8849b70829be96c986a56758b69c5d6 GIT binary patch literal 3689 zcmb7H+iu%N5N+QIeZ}^TOl+CEq+|)H3j{TS6h+Yh?z_Osw9SGNRg$^}{`Z`jy>OR` z4Ag#+c6MgYoVl$&J$(N0r_H~gx9jq$ZdRhrSDUJ6)V-U%GN%K0R&Q z;*A?0SO1j7x_jfsm%1$p$r;#Hju6Vc`lAg*DI#{F$IGHT5D`zyx~k7P+2l>WYSr0o zeJ($Yc6oCw*UtiMr((C*mBl_d%y6i)v#jd|hz1I4q%yB?T$hhxm6vM~#iOqyp$&Gc z4el@CCp-Y4@F1mwr>f37v8;DRlRp=W%v{QZF*Bh9`+2+^^k}D!97Vq#m zTHcq#3JoU(!jt>a7k30|&xz|xI^jVyaiN!Oi@8{MtcFUJ_@sy_mDWl4Z*`lvA zBOP5A2JPIlG89iqPMXeP~mTaJp!!t077`W2jRLiTIKl0t-_&Q+m4hHE!3yS(0RULbe+XWyalOZ%p7zIlCYwY zcv*FS<)q(Ra>&y)jh=+D$#-k%Y6F|q{kg!d?7sEWEsuUWyFO7^+ zYoU4Rn1LSS`j)1mw_;oD0@7kj@6RPSVg`B$E=EBgn?Ew;6s%}$Havk5Dv z`z|rw6N2gpI<{?n$)1dPxO3kiHGJP<{<9^t7)XW|A3eAdYruCvt=~I%*mzH;&_gI1 zx@fskdRE}($Zo=t<2?}`@fxu7(L9U>OP;2#UCR>SnJx3kG3y=)bT0|%ZxK0%!LB%T z+or&46q)ItqpomJz#6Mx2g-kasDx`gn2vL3xt*RQ={%V#6bEf&pI@j_4-8aKm<{BO zM$@@!fP>e9;YZO@v0bF7KYC*H!-scY&*m?-N)<6@SD%&BrZzkCRTNcQnAI30NQEm% zQAP4pbvPs<#1qJ21Xr#*v|s8=o3RtKGgwF}Tu6$m(!!ke^N`Ky-D{;31kZd2K+%A< zXcTP}`z7^&VcB3_AbdMd|M%mK1390o%Ac!>=4!uM_3Ht-_ufR$)#4K##lO)bpIgqv zgDOb%>Ozt5dk=Uco|ch~NOB4A?*rX{v_7qnLN}48x@)|PE<=*%rg4@{=%1VoKcRSf zBBx&EDKt8OdGFzys5opCaAf0jn#oCVolHF9d6e6XWVD~W$1HOiFyej-ypBdcd;``s Bg;f9m literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin new file mode 100644 index 000000000..61d1a468d --- /dev/null +++ b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_csm.bin @@ -0,0 +1,202 @@ +FSHFuniform sampler2D u_shadowMap3; +uniform sampler2D u_shadowMap2; +uniform sampler2D u_shadowMap1; +uniform sampler2D u_shadowMap0; +uniform vec4 u_csmFarDistances; +uniform vec4 u_lightAttenuationSpotOuter; +uniform vec4 u_lightSpotDirectionInner; +uniform vec4 u_lightSpecularPower; +uniform vec4 u_lightDiffusePower; +uniform vec4 u_lightAmbientPower; +uniform vec4 u_lightPosition; +uniform vec4 u_materialKs; +uniform vec3 u_materialKd; +uniform vec3 u_materialKa; +uniform vec4 u_color; +uniform vec4 u_params2; +uniform vec4 u_params1; +varying vec3 v_view; +varying vec4 v_texcoord4; +varying vec4 v_texcoord3; +varying vec4 v_texcoord2; +varying vec4 v_texcoord1; +varying vec4 v_position; +varying vec3 v_normal; +void main () +{ + float visibility_1; + vec3 colorCoverage_2; + visibility_1 = 1.0; + if ((v_position.z < u_csmFarDistances.x)) { + vec2 tmpvar_3; + tmpvar_3 = (v_texcoord1.xy / v_texcoord1.w); + float tmpvar_4; + tmpvar_4 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_3, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_3, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_5; + tmpvar_5.x = -(tmpvar_4); + tmpvar_5.y = tmpvar_4; + tmpvar_5.z = -(tmpvar_4); + colorCoverage_2 = tmpvar_5; + vec4 tmpvar_6; + tmpvar_6.w = 1.0; + tmpvar_6.xy = (v_texcoord1.xy / v_texcoord1.w); + tmpvar_6.z = v_texcoord1.z; + float tmpvar_7; + float tmpvar_8; + tmpvar_8 = ((v_texcoord1.z - u_params1.x) * u_params1.w); + vec4 tmpvar_9; + tmpvar_9 = texture2D (u_shadowMap0, tmpvar_6.xy); + vec2 tmpvar_10; + tmpvar_10.x = dot (tmpvar_9.xy, vec2(0.00390625, 1.0)); + tmpvar_10.y = dot (tmpvar_9.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_11; + tmpvar_11 = (tmpvar_10 * u_params1.w); + if ((tmpvar_8 < tmpvar_11.x)) { + tmpvar_7 = 1.0; + } else { + float tmpvar_12; + tmpvar_12 = max ((tmpvar_11.y - (tmpvar_11.x * tmpvar_11.x)), u_params1.z); + float tmpvar_13; + tmpvar_13 = (tmpvar_8 - tmpvar_11.x); + tmpvar_7 = mix ((tmpvar_12 / (tmpvar_12 + (tmpvar_13 * tmpvar_13))), 1.0, float(any(greaterThan (tmpvar_6.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_7; + } else { + if ((v_position.z < u_csmFarDistances.y)) { + vec2 tmpvar_14; + tmpvar_14 = (v_texcoord2.xy / v_texcoord2.w); + float tmpvar_15; + tmpvar_15 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_14, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_14, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_16; + tmpvar_16.x = tmpvar_15; + tmpvar_16.y = tmpvar_15; + tmpvar_16.z = -(tmpvar_15); + colorCoverage_2 = tmpvar_16; + vec4 tmpvar_17; + tmpvar_17.w = 1.0; + tmpvar_17.xy = (v_texcoord2.xy / v_texcoord2.w); + tmpvar_17.z = v_texcoord2.z; + float tmpvar_18; + float tmpvar_19; + tmpvar_19 = ((v_texcoord2.z - u_params1.x) * u_params1.w); + vec4 tmpvar_20; + tmpvar_20 = texture2D (u_shadowMap1, tmpvar_17.xy); + vec2 tmpvar_21; + tmpvar_21.x = dot (tmpvar_20.xy, vec2(0.00390625, 1.0)); + tmpvar_21.y = dot (tmpvar_20.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_22; + tmpvar_22 = (tmpvar_21 * u_params1.w); + if ((tmpvar_19 < tmpvar_22.x)) { + tmpvar_18 = 1.0; + } else { + float tmpvar_23; + tmpvar_23 = max ((tmpvar_22.y - (tmpvar_22.x * tmpvar_22.x)), u_params1.z); + float tmpvar_24; + tmpvar_24 = (tmpvar_19 - tmpvar_22.x); + tmpvar_18 = mix ((tmpvar_23 / (tmpvar_23 + (tmpvar_24 * tmpvar_24))), 1.0, float(any(greaterThan (tmpvar_17.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_18; + } else { + if ((v_position.z < u_csmFarDistances.z)) { + vec2 tmpvar_25; + tmpvar_25 = (v_texcoord3.xy / v_texcoord3.w); + float tmpvar_26; + tmpvar_26 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_25, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_25, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_27; + tmpvar_27.x = -(tmpvar_26); + tmpvar_27.y = -(tmpvar_26); + tmpvar_27.z = tmpvar_26; + colorCoverage_2 = tmpvar_27; + vec4 tmpvar_28; + tmpvar_28.w = 1.0; + tmpvar_28.xy = (v_texcoord3.xy / v_texcoord3.w); + tmpvar_28.z = v_texcoord3.z; + float tmpvar_29; + float tmpvar_30; + tmpvar_30 = ((v_texcoord3.z - u_params1.x) * u_params1.w); + vec4 tmpvar_31; + tmpvar_31 = texture2D (u_shadowMap2, tmpvar_28.xy); + vec2 tmpvar_32; + tmpvar_32.x = dot (tmpvar_31.xy, vec2(0.00390625, 1.0)); + tmpvar_32.y = dot (tmpvar_31.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_33; + tmpvar_33 = (tmpvar_32 * u_params1.w); + if ((tmpvar_30 < tmpvar_33.x)) { + tmpvar_29 = 1.0; + } else { + float tmpvar_34; + tmpvar_34 = max ((tmpvar_33.y - (tmpvar_33.x * tmpvar_33.x)), u_params1.z); + float tmpvar_35; + tmpvar_35 = (tmpvar_30 - tmpvar_33.x); + tmpvar_29 = mix ((tmpvar_34 / (tmpvar_34 + (tmpvar_35 * tmpvar_35))), 1.0, float(any(greaterThan (tmpvar_28.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_29; + } else { + vec2 tmpvar_36; + tmpvar_36 = (v_texcoord4.xy / v_texcoord4.w); + float tmpvar_37; + tmpvar_37 = (clamp ((1.0 - (float(any(greaterThan (tmpvar_36, vec2(1.0, 1.0)))) + float(any(lessThan (tmpvar_36, vec2(0.0, 0.0)))))), 0.0, 1.0) * 0.4); + vec3 tmpvar_38; + tmpvar_38.x = tmpvar_37; + tmpvar_38.y = -(tmpvar_37); + tmpvar_38.z = -(tmpvar_37); + colorCoverage_2 = tmpvar_38; + vec4 tmpvar_39; + tmpvar_39.w = 1.0; + tmpvar_39.xy = (v_texcoord4.xy / v_texcoord4.w); + tmpvar_39.z = v_texcoord4.z; + float tmpvar_40; + float tmpvar_41; + tmpvar_41 = ((v_texcoord4.z - u_params1.x) * u_params1.w); + vec4 tmpvar_42; + tmpvar_42 = texture2D (u_shadowMap3, tmpvar_39.xy); + vec2 tmpvar_43; + tmpvar_43.x = dot (tmpvar_42.xy, vec2(0.00390625, 1.0)); + tmpvar_43.y = dot (tmpvar_42.zw, vec2(0.00390625, 1.0)); + vec2 tmpvar_44; + tmpvar_44 = (tmpvar_43 * u_params1.w); + if ((tmpvar_41 < tmpvar_44.x)) { + tmpvar_40 = 1.0; + } else { + float tmpvar_45; + tmpvar_45 = max ((tmpvar_44.y - (tmpvar_44.x * tmpvar_44.x)), u_params1.z); + float tmpvar_46; + tmpvar_46 = (tmpvar_41 - tmpvar_44.x); + tmpvar_40 = mix ((tmpvar_45 / (tmpvar_45 + (tmpvar_46 * tmpvar_46))), 1.0, float(any(greaterThan (tmpvar_39.xy, vec2(0.95, 0.95))))); + }; + visibility_1 = tmpvar_40; + }; + }; + }; + vec3 tmpvar_47; + tmpvar_47 = -(normalize(v_view)); + vec3 tmpvar_48; + float tmpvar_49; + tmpvar_48 = -(normalize(u_lightPosition.xyz)); + tmpvar_49 = 1.0; + if ((0.0 != u_lightPosition.w)) { + vec3 tmpvar_50; + tmpvar_50 = (u_lightPosition.xyz - v_view); + vec3 tmpvar_51; + tmpvar_51 = normalize(tmpvar_50); + tmpvar_48 = tmpvar_51; + float tmpvar_52; + tmpvar_52 = cos((u_lightAttenuationSpotOuter.w * 0.0174533)); + float tmpvar_53; + tmpvar_53 = sqrt(dot (tmpvar_50, tmpvar_50)); + tmpvar_49 = ((1.0/(((u_lightAttenuationSpotOuter.x + (u_lightAttenuationSpotOuter.y * tmpvar_53)) + ((u_lightAttenuationSpotOuter.z * tmpvar_53) * tmpvar_53)))) * mix (clamp (((max (0.0, dot (-(tmpvar_51), normalize(u_lightSpotDirectionInner.xyz))) - tmpvar_52) / (cos((min (u_lightSpotDirectionInner.w, (u_lightAttenuationSpotOuter.w - 0.001)) * 0.0174533)) - tmpvar_52)), 0.0, 1.0), 1.0, float((u_lightAttenuationSpotOuter.w >= 90.0)))); + }; + float tmpvar_54; + tmpvar_54 = dot (v_normal, tmpvar_48); + vec2 tmpvar_55; + tmpvar_55.x = tmpvar_54; + tmpvar_55.y = (((float((tmpvar_54 >= 0.0)) * pow (max (0.0, dot ((((2.0 * tmpvar_54) * v_normal) - tmpvar_48), tmpvar_47)), u_materialKs.w)) * (2.0 + u_materialKs.w)) / 8.0); + vec2 tmpvar_56; + tmpvar_56 = (max (tmpvar_55, 0.0) * tmpvar_49); + float tmpvar_57; + tmpvar_57 = sqrt(dot (v_view, v_view)); + gl_FragColor.xyz = mix (vec3(0.0, 0.0, 0.0), (pow (((((u_lightAmbientPower.xyz * u_lightAmbientPower.w) * u_materialKa) * u_color.xyz) + ((((((u_lightDiffusePower.xyz * u_lightDiffusePower.w) * u_materialKd) * tmpvar_56.x) + (((u_lightSpecularPower.xyz * u_lightSpecularPower.w) * u_materialKs.xyz) * tmpvar_56.y)) * u_color.xyz) * visibility_1)), vec3(0.454545, 0.454545, 0.454545)) + (colorCoverage_2 * u_params2.y)), clamp ((1.0/(exp2(((4.36415e-05 * tmpvar_57) * tmpvar_57)))), 0.0, 1.0)); + gl_FragColor.w = 1.0; +} + + \ No newline at end of file diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_linear_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..2d7695d2eb24f2972a0b3ae4cc47f946371a2a3b GIT binary patch literal 6621 zcmcIoUvJws5Z_+&DY!SebsR~Q92;E*bS<(C!?t4C%bpC)VNwCI`X`Fp$0@5*W=>TIh{$3x5ZYS+W%b@MY%gg@m;0V+9OCngCf6w-@I-b zwcch;UaoI8W%J9nQB^-BZokbdwM5z<*6U$9wcHk2^{(6vk-W|C?zXi$LGgO^N3Pb* z35s`Rouej4%C0gnA? zi(qv2;Y?_)o7D#B7a-4HfTR5d(2^Dsp%G6;Ex;#0Stxi2Gu3 z4KaIzse!Hs?GWbyMG8>eY%2v75Q5g0z_AEg#7Dp-E}RsICZGlQL@kpboy@0UGF9i{ zY%HQl8mF@ve57L$PQp;m!)Xk^qe(c@iVGihsEkc50x!WZW;15!SL@jskpGurn&Hk3 z&fF6+Ms}7< z0XYJUhd=aFOAs%>KM94>PtOS2k7IEZQdXU_Ds#ia=^jonY0Q^zC$M6yk61g2+_LMV zKMGaU%3!A#W^kfC^3uZWGXO2_0xkX|pq+vml|}S32A2I7830 zUC2fD0FG3QqMil2D0(*TEX&h?*MT0j1{Zviz-KLBOL;-M;5)Wh`uK}tgIytpA!tw@)s(Pli{AhZ7Dz_3x}Zz`N6zEL2%nR@v1>fogTT{xN3Trp3vo1X5#QOjh85n>u{!l)y- zLRv*lH+6NNd-br#xOoS4vmRv5J7v+O83vx!=A-sC{YU?R(g`aa)AV3m9fuQ~XkltW zmUa$8{|D6?SmJP-7>B|j+Wqj<5>W1z=Hz0zx+ zF%?A?gssyRWbVU!tpw!{S}HS0U@&G=>wwZDzPjRjwB-X`%$(z?V{(IqQPJ%=66Qu@ zk&cKb!xR&ift9v(1h4Y^$KPlt|26`AubAq?G*h5omURH5```lsKmbS0FuF`qDR~C> z#hRpNv6%4npH*XS2>N0fLm6j+gvIaz`kQ9yi{P{}kC3z{wcUfZEEQ)4_8k&Hd5x;z3#jLOV1L-j~Ih}fpwnX7XfC}4>phg)pSFt)6l8;=+q z#A3mdWA`bk#)b-fBvr|pW;?Ise<8+`WQpn^-Z zvM$agbp}=p1|d!oUc!Og&MKYP4}=xdB{U}J2N+#mC0v%EK;UTsz}|m2IYJ~g2Np(C zJbxrTuAmmk1hM$qs*!^0xC8P&!qv1+Z^ZQ@gf$b|3YE-&O^OHu zG)n3e#3ss{G1$(g>%4IY+mb+~(;Swh_!m#?{sQ!X?C#KtrAtRPp6t<~+mTFa8Dpee$#b literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_lightning_vsm_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..fbfbe8542796542034d8a5110a0eef1c0fa7c117 GIT binary patch literal 6578 zcmcIo+m72d5N%)gE7&(V@j8+y`GRx{qzTd%Mcbg;mp&P)m%9-lTdpLpcQ?pG|D(Uq zf9%YVLy@|;yGWVwwUzgQZ)Y*1ls49LV4(s}Tc2ypK z%J$*QGv2>d8wp#DYO3sKV91JJ)zzu(Z;OLEwg0;+it>1h;=4+zokx&>21S1JzIoL& zYIn$*yxd*x%jTCuqpD#_+t>~`aHYI7*E>RovpBYBfwUmt39g5uTok6i7V z6BO^tI!8@<%5F0-Az?S1u=3K6LAY5xZ9Lvb(M_n$k81*dPJIkIG(e&&T?2JZ0rbtAgRo+#5T)! zBAA?gI1^gyX1fRaHOTW9;AnpVw4{YZXvC9IYp}|!US}J1sS1sqb!yqkwXe%tRb@A7 zJ;(J9>FiEih^w*@ftNCb=&57b?C$iv2jq4kl z7Gm}qQv+QO+9A#ZiWH!_IaCTNAOx)~fm0E*h>w6vyl_$=nt>MJ6SYZ#bhes@$y}X> z%c+QFX`C*X@R3eMI159$3glBfX@+Yz zI4e)c3WaP6DE;6knaO__-2qGc*nT@P}A z56BTB<1zP+`KsyCBDvRi63@rOEG61xAiz38I3(!FYb-bV& zx{!w@)tsx}Zz`N64 z(8%y+qvtS>i~63|zhdfNEC}16E67|(`CbRWeb7>w0h=96OQtOM3= z=!QN!(ySLoizJnjhhSfXM82;@?I;A_0JQJGjPFir6Ddw@SsH)Fss?z=%J%I^GN5P;BR%0s3}<-w?KEIV?5YNs?z=v^#fzA)cy;+*CJ?P=indnfCkz_ z4*CQ}8KyY)qAJ}EBdLJ-5@-bXm#mb8AttF;u&U^|(H9LS(%^6bCaKo*J`6aVd%T2$ zww*ybuNsI}rb{Tj^uvm-+7d27PL*r#ITn9ro?~<4kAhhz|2UgvAV66_w$D?TH8gG#~1;22<^342HAa zx^g*$wq{Ez$L6pk#lLuB_ZL71WOpY~EQdO*F;o%Ik6Sto9qMi$gF4Af&XXv`_dmz` bOQ+PyB{o3kA&gw>IR;;038^2?&c65;Iho~o literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_color_texture.bin new file mode 100644 index 0000000000000000000000000000000000000000..6eb00acedc630cc5f2cd9d50d0f67d2caab55e47 GIT binary patch literal 552 zcmZXRO>ToQ5QW>V4^hn$6l8&c6=^rEqV9VDkrCt+!0)OU=P<~9!|m?CL|fTSxoLXgnZl@0Ut@F&fwUMf=_S+p9iiBH|zoA>XJ#5 z)8L(sIeu!&Z<$8)zFv`P86h0(hy705TD@B;uG66>a*YU3S|y=%%Aqz=cV* z5jI?MV9xy#&KbNs-F|$2e=Vlj$k-g_I-gBa%O7D8&tG+7R?m7y@4Th9>ufrPWjd6w zjEl4!8e8{H70v4p73m&?Yr=mRcJ{GlBnZQhr(GKQ5GW-ALVe(BciW{EZ(CzLi3e7XAI!v9*Bq#7 fkzPHMvRrRmGwkZXh5k7C%@(L;CP7=i>CdCY5~oHWa9bAxPB2Dhh} z#!Q)&k*VMHQSPt%;rrM3zyJLEyIn6H%W9>biq&R0tMH53j-P%M({lf<*yww2S5(Kv zdaib}iBY?8Jv&UwvYMLSJ5lc)?7agQcaS}&>7ZOp)v8#ml^=LNJ#}uSUTvtgF;yyM zuhl2zQ-k%knh}T3K}I|?P#=^I5e-5dGyw#MHif$E5-~hb=CrISw|!oCI8qk<-q)el zQLYn=M+!n6oRZp~VR&>3pZB*4PycUQO@Cq6LL`I&YOLkbkmknWqKS2(#^H)&T*l#w zLOEB=T8PD5&-j^ZqJrUqOeaK#_Z zI=$rq>zOMCfgya{At04VvzXuD;~D|iBOnwBmA)PymC98D+$A8D3H58|*JFR+Isw-w zAQTFfI($Qv0^BJem5OvueW+%MSp#R)pz z3NjWRxlpj#HBPQNpGK&|yY6U$F<^TMMe;~AY1NGfZ2LJ#7 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e637209610fa49d7c48ede689593f62793ed243 GIT binary patch literal 234 zcmZ<@_F!Bh?O9cpSX7yrm#&bOlb=|kP!^w(T2PW<%~h74nWB)Jn3<=bp~+RvrJzuj znrxy_l3M^&A8%+46o9c6Y!%Xq5|c|bG@zOlw7`lr4E4;+&CQKcwGGU56wFLbjm`87 zbQFwC!IYt%fu^P=$ei??c({34)P8gO%U5p2DRipnaOxdtF(fP{gurGc4| NDK0kH_*yP51^^($Knnl> literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_packdepth_vsm.bin new file mode 100644 index 0000000000000000000000000000000000000000..0760f2f075435f66d0f637e4b4874b986f633287 GIT binary patch literal 459 zcmaja-D<-i7zW_=)T{UowLjLVDU{HoLfQE)AV{_ZA&J3;G;P^k>|%FVEpd@C*olhx zKHuxM{T~?-$}^eA&#Yh)rl^gw9w0yX_@VE_OC literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_texture.bin new file mode 100644 index 0000000000000000000000000000000000000000..3ea416c8023d1e151a2a69dc87c2fcd0d63daef7 GIT binary patch literal 137 zcmZ<@_F&AHv$HA9%S_8J%2g;%%q_@CEi!UZD2*>kt#HoI$uF|zDoZS?%*;zyC`(N? zQYZsSB@qIn>;OEAYb9REWIgVz;&LnV1tGCMtxkm@geb$bD9TyyL_J5v;uPXS z&M1pzPQvTFbckeLlax^~#+jkHVqDB9bV3!vtt_LylW4$bpak|z6LXZiM64n$_SnSQ zL*+{73$3J(J*}e>tFt8%jfTp|o?#yrIpEtMl~Q5ho8 zhlEX>g@-_Z>Pe$TU5 z$7TYTbfsMg!JdQ)(4(8lKE0i%3q$luNm?Z)uwyW7-a?ripqT0cL?^(5VM_Z+i|m)b zMoI|nNV?hXAUCtLpA;4FqmN66>)JPJA&g+HilbVM_E~S9vPBg%m$^xXf=1)Ig>ns) zJ#mc6$e8J78DY>)An3tzR@7v87Y({LhU>l8(8>ZH1;@T1@Heo313K`x7F-AsqN^^y zpy%Pkj)sRsZCYNJ+&q~8jyNn@-P=QG#jQ$W6wx%3}BDdbagQ5CYYxwwt izFg{1Eld#p9}c|nmRHO6By6?KnuwofmDFpe^X?z;+Ka6K literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e237bbc97ab71d4789f55f2e0dd9fb90dae8c0c GIT binary patch literal 311 zcmYk1%}&EG5QO3Chd_I@rC_;k6QxSa1yph2!~;ZDV?v}jYdL=|h<9fr6qMWUjAr)R z%lqp+K0KYquKB>=V6xW(jHNfhxLy}*)qCT7YlD6vv;Q;|&Tq!6f=wpenyy}Q8m4lv z@roF##lfZmXPOSUVBZY>st4yOQtk>8)>+PQhMlC$MvJ#EQa#SVse8{W9Dq~(Fa}E$ ze2bB6FALh}37*PhrVg2XRCz+}sZR5pmNWq+mD(RwrfH_LLQv%YWf@}>3rXFUmtg8= PY%vhY3R|!r#_oOrWkg^0 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin b/examples/runtime/shaders/glsl/fs_shadowmaps_unpackdepth_vsm.bin new file mode 100644 index 0000000000000000000000000000000000000000..fdc3ba0853511f5eb07fdcf552696721b536a7c7 GIT binary patch literal 288 zcmYk1%c{aK5QcS|hd9hKffCYsfkV%6qlg<=`B@!cc)0PyW#u!FLS({ zmiV*#Ypddh&On!4*U%1Bvxrr`VshRWa+d8;U9)eGzm?lld#6 zOGgEZ6pSt^;DS9Fe4-m;$&!RIf$5e#{6i?oGh=>u5VhC?r|cC^u>nr;P3tmR!RIrA wd9#pyAV7P#l1i<9)i&A$W4;g~`2Hrn_hPKf%jD>EzQ+05TD@B;uG66>a*YU3S|y=%%Aqz=cV* z5jI?MV9xy#&KbNs-F|$2e=Vlj$k-g_I-gBa%O7D8&tG+7R?m7y@4Th9>ufrPWjd6w zjEl4!8e8{H70v4p73m&?Yr=mRcJ{GlBnZQhr(GKQ5GW-ALVe(BciW{EZ(CzLi3e7XAI!v9*Bq#7 fkzPHMvRrRmGwkZXh5k7C%@(L;CP7=i>CdCY5~oHWa9bAxPB2Dhh} z#!Q)&k*VMHQSPt%;rrM3zyJLEyIn6H%W9>biq&R0tMH53j-P%M({lf<*yww2S5(Kv zdaib}iBY?8Jv&UwvYMLSJ5lc)?7agQcaS}&>7ZOp)v8#ml^=LNJ#}uSUTvtgF;yyM zuhl2zQ-k%knh}T3K}I|?P#=^I5e-5dGyw#MHif$E5-~hb=CrISw|!oCI8qk<-q)el zQLYn=M+!n6oRZp~VR&>3pZB*4PycUQO@Cq6LL`I&YOLkbkmknWqKS2(#^H)&T*l#w zLOEB=T8PD5&-j^ZqJrUqOeaK#_Z zI=$rq>zOMCfgya{At04VvzXuD;~D|iBOnwBmA)PymC98D+$A8D3H58|*JFR+Isw-w zAQTFfI($Qv0^BJem5OvueW+%MSp#R)pz z3NjWRxlpj#HBPQNpGK&|yY6U$iw~5QW>V@~^lNS``s66Y8F&Qlv^*ksBy+gfRjGAyxl-Z4AT?$p&}4``$fn z|FwO7sZQIrq(8i7&}9b}l5TYJPg$jZsJH zftI-fh0rCPlvqV9i_MXwygzVWr&do1O6igmF(N|L^t%`Bv>bTx8WG0pvxpo4~T?w22i2ye<=6HEK+E zVg$zQKxv)Xs8j`>@4~xsu+oKwE*yROme0`BK4*-29obV15~VYwm&`E@U(JTD60OMC zAmcj;;fZV~r2p|vI9C=PS))O9dXwwOKt*>@(S(wj&Ho+Vz%h50h~i)2m>NOyO>h&HBOIb z;Cjxd11gk&Ot;7pqXy`{{XN{m$PWzL;dnx;&IGVY;#ngVF}H|~Ilxty(Nn2(KI}%v z7phpd6^c=zA9!%16r9Cjf4jJ-(is>!Bfr+!lohJqio0n8Qq?`=C+6ycd$EzHg3g$6 z<{dK`=n!d`%?{NM>0fhtE>dw-0<~d`HLCFd)wrR;p0zIpuEEu7Mv87*{G(S_(|eo4 z>h+Az%AROiCIea~t(Io^i(sjzQ)pFQw>zV{8SVY3_PmdnG)mh|tKLR`ZR(?8caO~E S>HyiDiRp}&%=G|_ z1MSYN*(y*BLq14}S0u7{*wKO?*PM5S*HeNnMvuQ|IuIQKlaL& zWogFR**f>0bM8ZW`1Ca6bK><2pi&N9(IJ_0 zNbpdyakxO{dWF@>Uk*YG}>)n)J7R%3o^VCxGcEGX9C_+oxx}T%m)6g&w$EZu s6GLwvtu$5_c-)c|{#`>7>xrAF%!yiiqH-r{ekVHeFWIII{xks;%JLXXm zDKa*95{GYQ-j8>`e}4J?_Wr-E`5)0#P*F*sEhLi-{Ur~#Y_kqL*tfD}UhtlkrPzDn z9}Q#m30m^)lSI`C=-8vOv!e~IUef7&v{{J_EAKel-!$UckFJA`Hb-7>0r_(1iVj1Z zLxP8r9Ug^fHpGkMUL^A(Xxb82Iy>>gB^Q{!1t?cFHh`AvfJ)i$hgPz|F0~>YhyXP) zo!}d69_mKw zPO_O>67#{HUaiU9YzUh~u60BEaJ!!ii*GUT=?9`;a0=X(&OXlXIB$tv8RclHxE%7 ntEJSPU*O*rB(d(BE^+4ET6%8f&aIW_7IAK&r%Cc(5L|o!LQo8R literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_lightning_omni.bin new file mode 100644 index 0000000000000000000000000000000000000000..a0689ae9ee145d0a45774c422f647da1ad75dc9a GIT binary patch literal 1233 zcmZ{kO-{ow5QSlzQ_L~}5w(fiP1OwxV1rbFREbq&T2qXYxJsS$2eIHDT!A|>&Yx{k z?^-{<`JQKDFP|SS@4kP3%ACK6B7=-d0%anZEa;;=JhAo6b7;3|$(-T~OH;9T%J&6h z`9Mwi=3OFH3l&?bI9poKY&X{HZOlxpS-RwGzbM3qTb+3oEsi|j0M?74N-DHiiv$-X zJFJ8#*2JmAP9<_G7}|g<&Q|QWCIgG=RwRSk3aMdIMY|>=WMn%mp6RX>B)mIEuDU*lY z=y{Ry`dv_TMd2ub8ikkvprU%{?_ca4Tx%b$WP2S1M9GHpiBcY z&b%j+GaVu=+3ryDA^mHPW|5jz2Q-E;F;J5;s7Z^$o^@XeT!U|(84>-R2#>+wG*bgH zZQ^xTOQ)MOHVv6~1Fh})K8%|R-IGvXU0r6{mg#O!J#YPhH1B|Wdu$h1Z;E>}u{Y!6 KWbgg*yo*1+eV=0h literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_color_texture.bin new file mode 100644 index 0000000000000000000000000000000000000000..82cd381305d54b93d1f996a4667fe3a7a4c569b1 GIT binary patch literal 279 zcmZ{f%L>9U5Jh#HkC0imE{fIes;*rYglJzlGSVGIK>b3}HF#*Od}ZQqwgSOx zx}ZhUPDog~F4Pc&?8adHPQa?#HSsug;B!YEY#@$YmB;$w>ZmUSI8{7*`&}0NY=HUK Q7>+7$#M9(Wx-&L;0Azw)g#Z8m literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_depth.bin new file mode 100644 index 0000000000000000000000000000000000000000..c08b5667c7d1d8d7b0dbbdd1da2ae9035d1221c2 GIT binary patch literal 196 zcmWFw_F!ZHg3`RqwEUu6h1|pv6NS?F-29Z(oUqK)@_?fJENiaBl9Hm#q|%a9g|gIS zV}-={g8bsllFa-(Yp$~V%oL!m%sd4RO|EJ#1&|68g_7KYvc#fzLu;S_jICF$V5?xL nXMiGBQCS5PMK(}DAw4HP0BSx^P6N#~3R-XzHLba7xwserfYLuS literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_hblur.bin new file mode 100644 index 0000000000000000000000000000000000000000..21870f0dcbc75f0cc4a297cf3ecd3cbf9fa18fe8 GIT binary patch literal 1317 zcmaiyv2KGf6h+&WuXtn9s#XBQ5_RtwDOFbFCNy$|aYPJ(RQ=M9UHb=J`XGP}39vcNSTk{mc)VY+go)$QYCaH5l^+PX3!@DWPpd?J z=xKdD!@+Bqhtbl?SW+P70?q;z=36O~9UYvwgA-?PVs|DE=$ysUVoD|aEmdLJ!2#BG z=+9i79psTKE@K2rz5~H{470iQX#u=Pk||K)fJy--Li-z@VU`B1G|A!N#tzAOUS6tJ zR8!EXr8wk-9GhS(<18=Ecxv_n*hj&tu6arBJO*Yr^h=)htw_xaR5@lDTznhsq6119 zyTXH~25eX0I>jYLmrIHcsO;YZJr01%1(=Z)NWZ0x<0iC>Fw5irsVz@$m!H*lZQPJU z7IRaAj!IB+Q(_!AA>(M7s=F!U88Y6qjN6m(MrFKdnQP#LjH_j;?xu`y$oSJTv?t?_ U%J|bV*T4xGs%5bImu21k11iR^b^rhX literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth.bin new file mode 100644 index 0000000000000000000000000000000000000000..71bbbc323e43d1e20fddae9493d4194e5bfce7c5 GIT binary patch literal 286 zcmWFw_FycSQuL!VFEcH_C|4mjvBX57G(I;!B{e53GqpURC_l@Zt1PjoGBYn-p)57o zM4>FcAip@XBr`wHnk%uSq$o3~v?LWIWvq~hBvqE5nF2H}GfzQ7ldGCb0iwAiw*Y8Z zyrDHv0LIoUSFlwu)H6U4tEj93iXt0`YJw4xY9pXZ4Kzn9Xu-|b1Sw6=i4TA}8>kv; PHP{e@e^4Z9xwserssUg0 literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_packdepth_linear.bin new file mode 100644 index 0000000000000000000000000000000000000000..dc0cd079acdbc735d4b7defc937cf672dacdaa9a GIT binary patch literal 299 zcmZ9Hu?~VT5QcT_E4bVUnh-#o8h71DOjw&LMQdnFY5~FcHa@6@fB~nw{Q2&?yX16O zepbh}lsr>ffS@LVk_eTuJmIX4wYpWja7|qY6VNkKl7APsy zgBz}-olrcrGA_Y!(F;LGL|{Z=RV2VR7<;dVJp`UV%brbZ)2VQ72q$!CN$2lmSpWQP jhhB3M54Tx*Slvs8XF7*7=3Z;(eQ)Q&rY{)15n6l!UQS>! literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_texture.bin new file mode 100644 index 0000000000000000000000000000000000000000..82cd381305d54b93d1f996a4667fe3a7a4c569b1 GIT binary patch literal 279 zcmZ{f%L>9U5Jh#HkC0imE{fIes;*rYglJzlGSVGIK>b3}HF#*Od}ZQqwgSOx zx}ZhUPDog~F4Pc&?8adHPQa?#HSsug;B!YEY#@$YmB;$w>ZmUSI8{7*`&}0NY=HUK Q7>+7$#M9(Wx-&L;0Azw)g#Z8m literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_texture_lightning.bin new file mode 100644 index 0000000000000000000000000000000000000000..3d5205f3691494f2d5f842d79bafcb3af11c9071 GIT binary patch literal 608 zcmZ{hF>Avx5QUpnzv4!_P~%A6O!p2g1PWP=8mmFUmVzoPNkj6>JM`q(wPc!2+`D_< zJ>B~KWpRD`dF_<^)TV`&+XA|()wO8WQXE!B?@Dq{Es5jiB-Iw2*f4OF!;z>+v1r9{ zqqV8?Nb&6ok-RAhx7Nsy&I<2CfrlfJ#!%bqFKMM#v#|oD(a&jFV-%?%Ny(Xjw=KZ7 zdtA3#mRK0y*#Vwmnc-?d?RfgeYDfauHq~kXqn6CR2p<0&Q*RaWXy8qIULNsicHPMAViRh*RsUzfu`h%?`~vh{ B$!-7u literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_unpackdepth.bin new file mode 100644 index 0000000000000000000000000000000000000000..82cd381305d54b93d1f996a4667fe3a7a4c569b1 GIT binary patch literal 279 zcmZ{f%L>9U5Jh#HkC0imE{fIes;*rYglJzlGSVGIK>b3}HF#*Od}ZQqwgSOx zx}ZhUPDog~F4Pc&?8adHPQa?#HSsug;B!YEY#@$YmB;$w>ZmUSI8{7*`&}0NY=HUK Q7>+7$#M9(Wx-&L;0Azw)g#Z8m literal 0 HcmV?d00001 diff --git a/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin b/examples/runtime/shaders/glsl/vs_shadowmaps_vblur.bin new file mode 100644 index 0000000000000000000000000000000000000000..b0d51f7bc12e519db9e81928e87c50d693be196d GIT binary patch literal 1317 zcmaiyy-ve06op~UQ{1ry)oOm1ik-1iQP;?{p)!i&Ds|EX#FH|z@&+v2{Mk<0CR^ll zea`u=v)w%3fB*dbW(j)}DTh4Td60!CzM=dWv*fU*Ddne?)eUees{tKmS5mW2wMl<;t6hvYo3F4Ze) zU64q*IOL2zHo;cLSy6uAso4wQ5QpowW|Q1|49xD_n>@{1J9RHm=a^-1@haFQMSqwS zJ+-WYjZGr*qKmcb*tUa9n*J(vU{o;=j2`<&`Ymmo?QE+yW_kRdRC#Z-yoX&cG8Zsw zoo(EoLzZ(B!W)I~>W904xN4|j91T-%ewmqXST0& literal 0 HcmV?d00001 diff --git a/premake/premake4.lua b/premake/premake4.lua index ecedc718d..94c665a14 100644 --- a/premake/premake4.lua +++ b/premake/premake4.lua @@ -146,21 +146,24 @@ end dofile "bgfx.lua" dofile "example-common.lua" -exampleProject("00-helloworld", "ff2c8450-ebf4-11e0-9572-0800200c9a66") -exampleProject("01-cubes", "fec3bc94-e1e5-11e1-9c59-c7eeec2c1c51") -exampleProject("02-metaballs", "413b2cb4-f7db-11e1-bf5f-a716de6a022f") -exampleProject("03-raymarch", "1cede802-0220-11e2-91ba-e108de6a022f") -exampleProject("04-mesh", "546bbc76-0c4a-11e2-ab09-debcdd6a022f") -exampleProject("05-instancing", "5d3da660-1105-11e2-aece-71e4dd6a022f") -exampleProject("06-bump", "ffb23e6c-167b-11e2-81df-94c4dd6a022f") -exampleProject("07-callback", "acc53bbc-52f0-11e2-9781-ad8edd4b7d02") -exampleProject("08-update", "e011e246-5862-11e2-b202-b7cb257a7926") -exampleProject("09-hdr", "969a4626-67ee-11e2-9726-9023267a7926") -exampleProject("10-font" , "ef6fd5b3-b52a-41c2-a257-9dfe709af9e1") -exampleProject("11-fontsdf", "f4e6f96f-3daa-4c68-8df8-bf2a3ecd9092") -exampleProject("12-lod", "0512e9e6-bfd8-11e2-8e34-0291bd4c8125") -exampleProject("13-stencil", "d12d6522-37bc-11e3-b89c-e46428d43830") -exampleProject("14-shadowvolumes", "d7eb4bcc-37bc-11e3-b7a4-e46428d43830") +exampleProject("00-helloworld", "ff2c8450-ebf4-11e0-9572-0800200c9a66") +exampleProject("01-cubes", "fec3bc94-e1e5-11e1-9c59-c7eeec2c1c51") +exampleProject("02-metaballs", "413b2cb4-f7db-11e1-bf5f-a716de6a022f") +exampleProject("03-raymarch", "1cede802-0220-11e2-91ba-e108de6a022f") +exampleProject("04-mesh", "546bbc76-0c4a-11e2-ab09-debcdd6a022f") +exampleProject("05-instancing", "5d3da660-1105-11e2-aece-71e4dd6a022f") +exampleProject("06-bump", "ffb23e6c-167b-11e2-81df-94c4dd6a022f") +exampleProject("07-callback", "acc53bbc-52f0-11e2-9781-ad8edd4b7d02") +exampleProject("08-update", "e011e246-5862-11e2-b202-b7cb257a7926") +exampleProject("09-hdr", "969a4626-67ee-11e2-9726-9023267a7926") +exampleProject("10-font" , "ef6fd5b3-b52a-41c2-a257-9dfe709af9e1") +exampleProject("11-fontsdf", "f4e6f96f-3daa-4c68-8df8-bf2a3ecd9092") +exampleProject("12-lod", "0512e9e6-bfd8-11e2-8e34-0291bd4c8125") +exampleProject("13-stencil", "d12d6522-37bc-11e3-b89c-e46428d43830") +exampleProject("14-shadowvolumes", "d7eb4bcc-37bc-11e3-b7a4-e46428d43830") +exampleProject("15-shadowmaps-simple", "a10f22ab-e0ee-471a-b2b6-2f6cb1c63fdc") +exampleProject("16-shadowmaps", "f9a91cb0-7b1b-11e3-981f-0800200c9a66") + dofile "makedisttex.lua" dofile "shaderc.lua" dofile "texturec.lua"